⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 编程技巧 使用一个模板类实现对于类成员函数的回调执行(编译自topica).txt

📁 C&C++论坛精华
💻 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 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -