恭喜每个人!我有一个函数指针方法
int Myclass::*myMethod(char* a,char* b){
//some code
}
尝试运行它
bool Myclass::myMethod2(){
AnotherClass *instance = AnotherClass:getInstance();
instance-> addParams(&myMethod);
return true;
}
AnotherClass - 这个类在另一个dll中。 AnotherClass定义
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 *)。
嗯..我该怎么办?答案 0 :(得分:2)
你做不到。
addParams()
方法需要一个接受两个char*
参数的函数。
Myclass::myMethod
接受两个char*
参数和一个 Myclass
对象。
没有办法让两者兼容。
答案 1 :(得分:2)
编辑:我稍微误读了你的问题,并没有注意到关于DLL的一点 - 但如果你控制了DLL,并且想要修改它,那么仍有一个和三个仍然适用。如果没有,你所能做的就是第二名。
在这种情况下,您可以做三件事:
一,通过声明AnotherClass
来改变addParams
的设计方式:
void addParams(int (Myclass::*)(char*, char*) =0);
其中两个,您可以将Myclass::myMethod()
设为静态成员,然后您原来的addParams
声明就可以了。
三,您可以使用像boost这样的库来绑定方法,如下所示:
bool Myclass::myMethod2(){
AnotherClass *instance = AnotherClass:getInstance();
instance-> addParams(boost::bind(&Myclass::myMethod, this));
return true;
}
class AnotherClass
{
//...
void addParams(boost::function<int(char*, char*)>);
};
答案 2 :(得分:0)
您正在从对象的实例内部调用该方法。 (假设 Myclass :: myMethod2()不是静态的)
您可以通过以下方式调用该方法:
instance-> addParams(&(this->myMethod));