成员函数名做参数

来源:百度知道 编辑:UC知道 时间:2024/05/26 08:47:07
在VC2008中,怎样把一个成员函数名用作函数的参数,例如:
已经定义了类
class p1{
public:
int fun1();
}
在另一个类中,定义了类型为p1的成员变量:
class p2{
public:
p1 method;
void fun2(int,int (p1::*fun)(void));
};
对函数fun2这样定义:
void p2::fun2(int a, int (p1::*fun)(void))
{
(method.*fun)();
}
(省略了其余部分,只把调用的语句写上了)
那么我在调用成员函数fun2时可以这样调用
fun2(a,method.fun1);

这样的方式传递成员函数名在vc6.0上编译通过,但在vc2008上编译通不过,请各位高手给予帮助

fun2(a,method.fun1);
改为
fun2(a,&p1::fun1);
不知道技术改动上的细节是怎么样的,但是从纯理论上探讨,fun1这个函数是绑定在类p1上的,而不是具体的对象method上。
或者说,只有p1::fun1函数的地址,这个地址可以与任何p1类的实例相联系;并不存在一个只能和对象method相联系的method.fun1。

错误提示 ,不太可能是代码问题,估计头文件引用的问题,最好把错误贴上来