2012-03-12 220 views
1

可能重复:
C++ member-function pointer
How to invoke pointer to member function when it's a class data member?C++:成员调用非静态成员函数指针

我是最近才开始使用C++,所以我道歉,如果以下包含任何微不足道的错误,或者如果我错过了更简单的解决方案。我想实现这样的事情:

class ClassA { 

typedef double (ClassA::*CondFunc)(); 
public: 
    ClassA(int x, int y) { 

     value_ = x; 

     switch (y) { 
      case 0: 
       condFunc_ = &ClassA::condA; 
       break; 
      case 1: 
       condFunc_ = &ClassA::condB; 
      default: 
       break; 
     } 
    } 

    ~ClassA(); 

    int value_; 
    CondFunc condFunc_; 
    double condA() { return 2.0*value_; } 
    double condB() { return 4.0*value_; } 

    void Test() { 
     int a = condFunc_(); // compile error 
    } 
}; 

但在Test()中出现编译错误。请注意,这是一个大大简化的功能,不应该有任何意义。我已经搜索了这个论坛和其他地方的答案,但我仍然不确定是否可以定义/调用这样的非静态成员函数指针。我遇到的唯一可能的提示/解决方案采用了静态包装函数来实现类似的功能。我会很感激任何帮助/澄清。

+2

这是在编译器错误的情况下,列出您收到的实际错误消息非常有用。 – 2012-03-12 03:55:29

+0

我的直接反应是,如果你退后一步(可以这么说),我们可以帮助更多,并告诉我们更多关于你想要完成的事情。在使用C++大约25年的时间里,我可能已经使用指针指向成员函数的所有时间。 – 2012-03-12 03:56:49

+0

我得到的编译器错误是(使用Xcode):被调用的对象类型'CondFunc'(又名'double(ClassA :: *)()')不是函数或函数指针。至于我试图这样做的原因:成员函数的部分功能必须依赖'y';在实际的功能中,这是在一个循环内调用的,我想避免一个开关。 – 2012-03-12 04:08:07

回答

4

你必须调用成员函数指针像这样:

int a = (this->*condFunc_)(); 
+0

这很有效,感谢您的快速回复! – 2012-03-12 04:28:59