C++:对非静态成员函数指针的成员调用

C++: member call to non-static member function pointer

本文关键字:指针 成员 调用 函数 静态成员 C++      更新时间:2023-10-16

可能重复:
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()中出现编译错误。请注意,这是一个大大简化的函数,不应该有任何意义。我已经在这个论坛和其他地方搜索了答案,但仍然不确定是否可以定义/调用这样的非静态成员函数指针。我遇到的唯一合理的提示/解决方案使用了一个静态包装器函数来实现类似的功能。如有任何帮助/澄清,我将不胜感激。

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

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