c++ - 从结构中复制指向成员函数的指针

标签 c++

我的代码组织如下

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/

相关文章:

c++ - 在 C++ 中的 dll 中使用函数?

c++ - 检查 Char 是否在范围内

c++ - visual c++,没有编译器优化的数字代码给出错误的结果

c++ - 如何确定非多态类型的混合模板的类型兼容性

android - OpenCV Android eclipse设置示例工程报错

c++ - 未定义引用

c++ - 为什么 Friend 函数不能访问类的私有(private)成员

c++ - 尝试使用可变参数模板定义类型

c++ - 为什么这个示例有效?

c# - 在二维 ORPG 中保存 map 数据