#pragma once #include <functional> #include <map> using namespace std; template<typename x> struct signal; template <typename ret_t, typename... args_t> struct signal<ret_t(args_t...)> { typedef int key_t; // typedef function<ret_t(args_t...)> func_t; key_t nextkey_t; map<key_t, func_t> connections; key_t operator+=(func_t f) { key_t k = nextkey_t++; connections[k] = f; return k; } void operator-=(key_t k){ connections.erase(k); } void operator()(const args_t&... args) { for(auto conn : connections) { (conn.second)(args...); } } };
test:
int main() { signal<void()> sig; int k = sig += [](){ cout << "111" << endl; }; sig += [](){ cout << "222" << endl; }; sig -= k; sig(); }
原文链接: https://www.cnblogs.com/aj3423/archive/2013/05/28/3150499.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/90329
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!