C_C++使用技巧全集

源代码在线查看: 编程技巧 使用一个模板类实现对于类成员函数的回调执行(编译自topica).txt

软件大小: 407 K
上传用户: cocoplus
关键词: C_C 使用技巧
下载地址: 免注册下载 普通下载 VIP

相关代码

				作者:rick1126
				email: rickzhang@sina.com
				日期:2001-4-13 9:23:39
				A GENERIC CALLBACK DISPATCHER 
				可以创建一个通用的回调模板类进行成员函数的自动回调. 这样的一个模板将将类作为其成员函数的第一个参数, 第二个参数是一个指向类成员函数的指针. 关键在于将第二个参数基于第一个参数如下: 
				
				template < class T, void (T::*F)() > class callback {/**/}; 
				
				该模板的实现十分简单: 它具备一个针对T的引用, 就是所需调用的成员函数的宿主类, 一个跟在其和一个称之为execute()的成员函数.: 
				
				template < class T, void (T::*F)() >
				class callback
				{
				 public:
				    callback(T& t) : object(t) {}/*assign actual object to T*/
				    void execute() {(object.*F)();}/*launch callback function*/
				 private:
				    T& object;
				}; 
				
				要通过一个成员指针调用成员函数, 你必须具有一个针对确定的对象的引用. 这就是为什么模板需要一个 T& 作为成员变量. 现在你需要使用回调模板来执行一个类 A 的成员函数: 
				
				class A
				{
				 public:
				    void f();
				}; 
				
				你不能使用变量操作成员函数地址, 为此使用 & 操作来获得函数地址. 最后, 传递该成员函数的数组对象给模板对象.: 
				
				int main()
				{
				 A a; /*first, create an object*/
				 callback < A, &A::f > c(a); /*instantiate template*/
				 c.execute(); /*invoke a.f()*/
				} 
				
				你可以使用回调模板类结合任意类型的类, 只要其成员函数具有同样的形式.
				-----------
				Danny Kalev 			

相关资源