所以,我知道这个问题在很多地方都有。但是没有一个例子能帮助我解决我的问题。
我正在尝试创建一个方法指针(在类中),因此它将根据特定条件寻址类的多个方法之一。
我试图使用静态函数进行操作(猜测我误解了如何操作的说明...),但没有成功。
以下是头文件:
class myClass
{
public:
myClass(int value);
void methodA(const string &msg);
void methodB(const string &msg);
void (*send_msg)(const string &msg);
};
还有 C++:
myClass::myClass(int value){
if(value > 0){
send_msg = &methodA
}
else{
send_msg = &methodB
}
}
对于一些已经了解的错误:
错误:ISO C++禁止获取未限定或括号化的非静态成员函数的地址以形成指向成员函数的指针。请说‘&myClass :: methodA’[- fpermissive]
错误:无法将“void(myClass :: *)(const string&){aka void(myClass :: *)(const std :: basic_string&)}”转换为“void(*)(const string&){aka void(*)(const std :: basic_string&)}”在赋值中
任何帮助都将不胜感激。
编辑感谢Jose,它可以编译:
void (myClass::*send_msg)(const string &msg);
同时也请完成以下任务:
send_msg = &myClass::methodA;
但是现在,当我试图使用这段代码时,我无法调用函数指针:
this->myClass_instance.send_msg(line); //*****getting error*****
当this
是其他类的实例时,
出现以下错误:
错误:必须使用“。”或“->”调用指向成员函数的指针,例如“(... -> *((otherClass *)this) -> otherClass :: myClass_instance.myClass :: send_msg)(...)”
std::function
和lambda函数会更容易、更易读和更短,不是吗? - David Haimsend_msg
? - BarrymethodA
和methodB
应该是静态成员函数。 - songyuanyao