fork download
  1. #include <functional>
  2. #include <vector>
  3.  
  4. template<typename ... Args>
  5. class event_base{
  6. public:
  7. using delegate_type = std::function<void(Args...)>;
  8. using id_type = size_t;
  9.  
  10. protected:
  11. std::vector<std::tuple<delegate_type, id_type>> m_funcs;
  12. };
  13.  
  14. struct mutable_tag{};
  15. struct callable_tag{};
  16.  
  17. template<class ...>
  18. class event;
  19.  
  20. template<typename ... Args>
  21. class event<mutable_tag, Args...>: public event_base<Args...>{};
  22.  
  23. template<typename ... Args>
  24. class event<callable_tag, Args...>: public event_base<Args...>{};
  25.  
  26. template<typename ... Args>
  27. class event<mutable_tag, callable_tag, Args...>: public event<mutable_tag, Args...>, public event<callable_tag, Args...>{};
  28.  
  29. template<typename ... Args>
  30. class event<callable_tag, mutable_tag, Args...>: public event<mutable_tag, callable_tag, Args...>{};
  31.  
  32. template<typename ... Args>
  33. class event : event<callable_tag, mutable_tag, Args...>{};
  34.  
  35. int main()
  36. {
  37. event<int> e;
  38. return 0;
  39. }
  40.  
Success #stdin #stdout 0s 3292KB
stdin
Standard input is empty
stdout
Standard output is empty