OSDN Git Service

method_pointer: クラスのポインタとか、参照とか指定する、call()
authormyun2 <myun2@nwhite.info>
Wed, 11 Jul 2012 17:19:45 +0000 (02:19 +0900)
committermyun2 <myun2@nwhite.info>
Wed, 11 Jul 2012 17:19:45 +0000 (02:19 +0900)
roast/include/roast/tp/method_pointer.hpp
roast/test/server_socket_test/server_socket_test.cpp

index 3904406..eef1314 100644 (file)
@@ -25,6 +25,7 @@ namespace roast
                
                method_pointer() : class_ptr(0), func_ptr(0){}
                method_pointer(method_pointer_type p) : class_ptr(0), func_ptr(p){}
+               method_pointer(_Class &class_ref, method_pointer_type p_func) : class_ptr(&class_ref), func_ptr(p_func){}
                method_pointer(_Class *p_class, method_pointer_type p_func) : class_ptr(p_class), func_ptr(p_func){}
 
                _Ret call(){
@@ -38,6 +39,26 @@ namespace roast
                {
                        return call();
                }
+
+               _Ret call(_Class *p_class){
+                       class_ptr = p_class;
+                       return call();
+               }
+               _Ret operator()(_Class *p_class)
+               {
+                       class_ptr = p_class;
+                       return call();
+               }
+
+               _Ret call(_Class &class_ref){
+                       class_ptr = &class_ref;
+                       return call();
+               }
+               _Ret operator()(_Class &class_ref)
+               {
+                       class_ptr = &class_ref;
+                       return call();
+               }
        };
        
        /////////////////////////////////////////////////////////////
index 82833af..aefef4f 100644 (file)
@@ -26,7 +26,9 @@ void main( void )
                //server_socket<connection_thread> ss(99);
 
                method_pointer<void, A> p = &A::hoge;
-               p();
+               A a;
+               p(a);
+               p(&a);
        }
        catch(const exception &e)
        {