成员函数指针和其他类型的强制转换,使用一般指针调用成员函数
2007-11-09 12:42
281 查看
成员函数指针和其他类型之间的转换,参见如下示例:

class test


...{

public:


void t()...{};

};


typedef void (test::*pMemFnction)();


int main()


...{

pMemFnction method = &test::t; //成员函数指针定义并初始化


int method_ptr = *(int *)&method; //强制转换

pMemFnction m = *(pMemFnction *)&method_ptr; //强制转换, OK


return 0;

}
转换的作用,一方面可能因为特殊的需求,同时也可以方便调试和检查,例如输出函数地址等。也可以使用转换后的指针调用成员方法,比如:

class test


...{

public:


void t()...{cout<<"This is a test!"<<endl;}

};


typedef void (test::*pMemFnction)();


int main()


...{

pMemFnction method = &test::t; //取成员函数

int *method_ptr = (int *)&method; //强制转换为int *


test t;

(t.**(pMemFnction *)method_ptr)(); //使用 method_ptr 调用其成员方法

return 0;

}

class test


...{

public:


void t()...{};

};


typedef void (test::*pMemFnction)();


int main()


...{

pMemFnction method = &test::t; //成员函数指针定义并初始化


int method_ptr = *(int *)&method; //强制转换

pMemFnction m = *(pMemFnction *)&method_ptr; //强制转换, OK


return 0;

}
转换的作用,一方面可能因为特殊的需求,同时也可以方便调试和检查,例如输出函数地址等。也可以使用转换后的指针调用成员方法,比如:

class test


...{

public:


void t()...{cout<<"This is a test!"<<endl;}

};


typedef void (test::*pMemFnction)();


int main()


...{

pMemFnction method = &test::t; //取成员函数

int *method_ptr = (int *)&method; //强制转换为int *


test t;

(t.**(pMemFnction *)method_ptr)(); //使用 method_ptr 调用其成员方法

return 0;

}
相关文章推荐
- 函数调用缺少参数列表;请使用“&****Dlg::getThread”创建指向成员的指针”--多线程函数调用
- 函数调用缺少参数列表;请使用“&Student::Printf”创建指向成员的指针 问题解析
- 一般函数指针和类的成员函数指针——其实是调用约定惹的事
- Qt使用回调函数报错“函数调用缺少参数列表,请使用&xxx创建指向成员的指针”解决办法
- 使用纯C函数指针调用C++的类成员函…
- error C3867: “Point::getX”: 函数调用缺少参数列表;请使用“&Point::getX”创建指向成员的指针
- 使用类成员函数指针调用C++成员函数的一种方式
- error C3867: “A::fun1”: 函数调用缺少参数列表;请使用“&A::fun1”创建指向成员的指针
- C++ MFC 其他函数获得主对话框指针并使用成员的方法
- 使用纯C函数指针调用C++的类成员函数
- C++ MFC 其他函数获得主对话框指针并使用成员的方法
- “error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误
- 使用纯C函数指针调用C++的类成员函数
- static函数 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针;类的static成员函数
- “error C3867: “XXX”: 函数调用缺少参数列表;请使用“&XXX”创建指向成员的指针”的错误
- “Caculate::writehtml”: 函数调用缺少参数列表;请使用“&Caculate::writehtml”创建指向成员的指针
- error: 函数调用缺少参数列表;请使用“&BinTree<char>::_PrintNode”创建指向成员的指针
- 使用void指针给函数传递不同的数据类型
- 指针类型作为成员函数的参数
- C++成员函数 this指针 调用约定