c_c++技巧集
源代码在线查看: 编程技巧 使用一个模板类实现对于类成员函数的回调执行(编译自topica).txt
作者: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