我的代码组织如下
class MyClass
{
public:
typedef void (MyClass::Ptr2func)();
}
struct abc
{
MyClass::Ptr2func ptr;
bool result;
}
void main()
{
MyClass myCls;
abc var;
//here is a lot of decision making code and pointer initializations
//I want to copy the pointer to function in another variable
MyClass::Ptr2func tempPtr;
tempPtr=var.ptr;
}
当我尝试将 var.ptr
复制到 tempPtr
时,它给我一个编译错误,指出缺少参数列表。它还在 myCls.*(var.ptr())
上给我编译错误;有优先级问题吗?我试过使用括号但没有任何效果。我希望有人能帮我解决这个问题。
感谢和问候, 萨巴塔瑟尔
最佳答案
我认为问题在于你的 typedef
typedef void (MyClass::Ptr2func)();
不是为指向成员函数的指针定义 typedef,而是为成员函数类型定义类型定义。成员函数指针的类型定义为
typedef void (MyClass::* Ptr2func)();
注意这里涉及的显式指针。类型
typedef void (MyClass::Ptr2func)();
实际上是 MyClass
中成员函数 类型的 typedef,它不接受任何参数并返回 void。
至于你的最后一个问题,调用成员函数指针的正确语法是(我相信)
(myCls.*var.ptr)()
请注意,在尝试将其作为函数调用之前,您必须将表达式 (myClass.*var.ptr)
括起来,因为代码
myCls.*(var.ptr())
表示“取消引用由 var.ptr()
相对于对象 myCls
返回的指向成员的指针。
希望这对您有所帮助!
关于c++ - 从结构中复制指向成员函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6299572/