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();
    }
    


  • 相关阅读:
    geoserver 文件系统
    geoserver 源码介绍
    geoserver 开发2
    geoserver 开发1
    geoserver笔记
    linux 下安装gult
    LINUX 笔记5
    SQLSTATE[HY000] [2002] 乱码
    微信开发
    javascript记忆
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3105178.html
Copyright © 2011-2022 走看看