c++ 精简版 signal

#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】免费获取数百本计算机经典书籍

    c++ 精简版 signal

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/90329

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月10日 上午12:35
下一篇 2023年2月10日 上午12:35

相关推荐