zoukankan      html  css  js  c++  java
  • 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();
    }
    


  • 相关阅读:
    字符、字符串和文本处理
    接口
    泛型
    事件
    Expression表达式树 案例
    栈帧
    属性
    方法
    常量和字段
    Dynamic
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3105178.html
Copyright © 2011-2022 走看看