代码
#include <iostream>
#include <list>using namespace std;
struct CallbackBase { virtual void operator()(const char* msg,int len) = 0; };void messagesCB(const char* msg,int len)
{std::cout<<msg<<" "<<len<<std::endl;
}struct MessagesWatcher
{void update(const char* msg,int len){for(auto& cb:m_lst){(*cb)(msg,len);}}void add(CallbackBase* cb){m_lst.push_back(cb);}
public:std::list<CallbackBase*> m_lst;
};MessagesWatcher watcher;template<class Callable>
void dispatch(Callable callable)
{struct _Callback : public CallbackBase {Callable callable;_Callback(Callable& cb) : callable(cb) { }void operator()(const char* msg,int len) { callable(msg,len); }};_Callback* callback = new _Callback(callable);watcher.add(callback);
}int main()
{dispatch(messagesCB);std::string lambdas{"lambdas"};dispatch([lambdas](const char* msg,int len){std::cout<<lambdas<<" "<<msg<<" "<<len<<std::endl;});watcher.update("hello",5);return 0;
}
说明
支持lambda
std::string lambda{"lambda"};dispatch([lambdas](const char* msg,int len){std::cout<<lambdas<<" "<<msg<<" "<<len<<std::endl;});