???????????

????????????

View Code
 #include "Event.h"
 
 using namespace std;
 
 
 void f1(int?? int)
 {
     puts("f1()");
 }
 
 struct F2
 {
     F2() { puts("F2 construct"); }
     F2(const F2 &) { puts("F2 copy"); }
     F2(F2 &&) { puts("F2 move"); }
     F2& operator=(const F2 &)  { puts("F2 copy assign"); return *this; }
     F2& operator=(F2 &&)  { puts("F2 move assign"); return *this; }
 
     void f(int?? int)
     {
         puts("f2()");
     }
 
     void fc(int?? int) const
     {
         puts("f2c()");
     }
 };
 
 struct F3
 {
     F3() { puts("F3 construct"); }
     F3(const F3 &) { puts("F3 copy"); }
     F3(F3 &&) { puts("F3 move"); }
     F3& operator=(const F3 &)  { puts("F3 copy assign"); return *this; }
     F3& operator=(F3 &&)  { puts("F3 move assign"); return *this; }
 
     void operator ()(int?? int) const
     {
         puts("f3()");
     }
 };
 
 int _tmain(int argc?? _TCHAR* argv[])
 {
     Utility::Event<int?? int> e;
 
     // ?????
     e.addHandler(f1);
 
     int id = e.addHandler(&f1);                                  
     e.removeHandler(id);                                                // ?????????????
   
 
     // ???????
     using namespace std::placeholders;
 
     F2 f2;
     const F2 *pf2 = &f2;
 
     e.addHandler(bind(&F2::f?? &f2?? _1?? _2));        // std::bind
     e.addHandler(&f2?? &F2::f);
 
     e.addHandler(pf2?? &F2::fc);                                    // ???????
   
     puts("----addHandler(f2?? &F2::f)----");
     e.addHandler(f2?? &F2::f);                                        // ??????????
 
     puts("----addHandler(F2()?? &F2::f)----");
     e.addHandler(F2()?? &F2::f);                                    // ??????????
 
     puts("--------");
 
 
     // ?o???
     F3 f3;
     const F3 *pf3 = &f3;
 
     puts("----addHandler(f3)----");
     e.addHandler(f3);                                                        // ??????????
 
     puts("----addHandler(F3())----");
     e.addHandler(F3());                                                    // ??????????
     puts("--------");
 
     e.addHandler(ref(f3));                                            // ???÷o???????
     e.addHandler(ref(*pf3));                                        // ???÷o???????????
 
     puts("--------");
 
     // Lambda????
     e.addHandler([](int?? int) {
         puts("f4()");
     });
 
     // ???????
     e(1?? 2);
 
     return 0;
 }