【发布时间】:2011-07-18 09:57:41
【问题描述】:
大家好!我有一个函数指针方法
int Myclass::*myMethod(char* a,char* b){
//some code
}
并尝试运行它
bool Myclass::myMethod2(){
AnotherClass *instance = AnotherClass:getInstance();
instance-> addParams(&myMethod);
return true;
}
AnotherClass - 另一个 dll 中的此类。另一个类定义
class AnotherClass
{
//friend class Myclass;
public:
static AnotherClass* getInstance();
void addParams(int (*myMethod)(char*, char*) =0);
//I try so void addParams(int (Myclass::*myMethod)(char*, char*) =0);
};
并且有错误 C2664。 无法将参数 1 从 'int Myclass::* (__cdecl *)(char *,char *)' 转换为 'int (__cdecl *)(char *,char *)。
嗯.. 我该怎么办?
【问题讨论】:
-
不可能将成员函数指针转换为非成员函数指针。你真正想在这里做什么?可能有更好的方法来做你想做的事。
-
AnotherClass看起来设计得很糟糕,因为它只需要一个函数指针,没有属于调用者的上下文。您的调用者显然想提供一些上下文(在Myclass的特定实例上调用非静态成员函数MyMethod时,您需要this指向的东西)。 C 风格的回调接口通常有一个用户数据指针,在 C++ 中你可以这样做,或者使用多态。根据 dll 边界的重要性,您或许可以将addParams设为模板。
标签: c++ pointers callback function-pointers c2664