从结构复制指向成员函数的指针

时间:2011-06-09 21:32:24

标签: 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())的编译错误;有优先问题吗?我尝试过使用括号但没有任何作用。我希望有人可以帮助我。

谢谢和问候, Saba Taseer

3 个答案:

答案 0 :(得分:2)

我认为问题在于你的typedef

typedef void (MyClass::Ptr2func)();

没有为指向成员函数的指针定义typedef,而是为成员函数类型定义。成员函数指针的typedef为

typedef void (MyClass::* Ptr2func)();

注意这里涉及的显式指针。类型

typedef void (MyClass::Ptr2func)();

实际上是MyClass成员函数类型的typedef,它不带参数并返回void。

至于你的最后一个问题,调用指向成员函数的指针的正确语法是(我相信)

(myCls.*var.ptr)()

请注意,在尝试将其称为函数之前,必须将表达式(myClass.*var.ptr)括起来,因为代码

myCls.*(var.ptr())

表示“取消引用var.ptr()相对于对象myCls返回的指向成员的指针。

希望这有帮助!

答案 1 :(得分:1)

此:

typedef void (MyClass::Ptr2func)();

定义一个函数类型。 MyClass::在该定义中完全无关紧要;最终类型为void ()。 (为什么?你在MyClass中,所以MyClass::被视为强化,你希望typedef Ptr2func属于MyClass,而不是你希望该类型指定成员函数的语句。)

你想要这个:

typedef void (MyClass::*Ptr2func)();

定义了指向成员函数的指针。

答案 2 :(得分:-2)

你问的是编译错误。

在我写这篇文章时,你的代码在每个类定义后都没有半字节。

此外,几乎任何其他编译器都会对MSVC作出反应void main;使用标准int main

作为一个完全初学者(犯这些错误),使用成员指针并不是一个好主意。

根本不这样做,而是解释你希望通过它实现的目标。

干杯&第h