Скорее всего, вы хотите:
void registerCallback(std::tr1::function<void (std::string)> cb)
{
this->callbacks.push_back(cb);
}
с callbacks
контейнером (в зависимости от того, что вам нравится) из std::tr1::function
объектов вместо одного. При отправке перебирайте обратные вызовы.
Кроме того, если вы хотите иметь возможность удалять обратные вызовы позже, вы можете сделать что-то вроде этого:
// I use list because I don't want the iterators to be invalid
// after I add / remove elements
std::list<std::function<void(std::string)>> callbacks;
...
typedef std::list<std::function<void(std::string)>>::iterator callback_id;
callback_id register_callback(std::function<void(std::string)> f)
{
return callbacks.insert(callbacks.end(), f);
}
void unregister_callback(callback_id id)
{
callbacks.erase(id);
}