????????????????СС?????????o??????????????????????????????????????????????????

1 e.addHandler(ref(f2));
2 e.addHandler(ref(*pf2));    // pf2?????f2?????

??????????÷o??????????????β??????????ü?????????ο?????Lambda??????????????

???????

????1??????????bind?????????鷳?????addhandler???????

template<class ObjT?? class FuncT> int addHandler(ObjT obj?? FuncT func)
         {
             using namespace std::placeholders;
             m_handlers.emplace(m_handlerId?? std::bind(func?? std::forward<ObjT>(obj)?? _1?? _2));
             return m_handlerId++;
         }

????2?????????????????б??????????????£?

struct NullType {};
 
 template<class P1 = Private::NullType?? class P2 = Private::NullType>
 class Event
 {
 public:
     template<class ObjT?? class FuncT> int addHandler(ObjT obj?? FuncT func)
     {
         using namespace std::placeholders;
         m_handlers.emplace(m_handlerId?? std::bind(func?? std::forward<ObjT>(obj)?? _1?? _2));
         return m_handlerId++;
     }
 
     void operator ()(P1 arg1?? P2 arg2)
     {
         for ( const auto& i : m_handlers )
             i.second(arg1?? arg2);
     }
 };
 
 template<>
 class Event<Private::NullType?? Private::NullType>
 {
 public:
     template<class ObjT?? class FuncT> int addHandler(ObjT obj?? FuncT func)
     {
         using namespace std::placeholders;
         m_handlers.emplace(m_handlerId?? std::bind(func?? std::forward<ObjT>(obj)));
         return m_handlerId++;
     }
 
     void operator ()()
     {
         for ( const auto& i : m_handlers )
             i.second();
     }
 };
 
 template<class P1>
 class Event<P1?? Private::NullType>
 {
 public:
     template<class ObjT?? class FuncT> int addHandler(ObjT obj?? FuncT func)
     {
         using namespace std::placeholders;
         m_handlers.emplace(m_handlerId?? std::bind(func?? std::forward<ObjT>(obj)?? _1));
         return m_handlerId++;
     }
 
     void operator ()(P1 arg1)
     {
         for ( const auto& i : m_handlers )
             i.second(arg1);
     }
 };

???????????0~2??????????????????????й???????????????????????????????????????????

??????????£?VC??std::function????5?????????????10????????????????????o?_VARIADIC_MAX=10