从静态方法

时间:2017-06-09 21:48:15

标签: c++

我的Individual.hpp文件中有以下代码:

typedef string (Individual::*getMethodName)(void);    
static getMethodName currentFitnessMethodName;
static string getCurrentFitnessMethodName();

这是在我的.cpp文件中:

string Individual::getCurrentFitnessMethodName(){
    return (Individual::*currentFitnessMethodName)();
}

我在代码的其他部分使用函数指针但总是在同一个对象上下文中,所以我这样做(this-> * thingyMajigger)(params),但是使用那个静态调用我得到以下错误:

预期的不合格ID

我已经尝试了所述代码的多种排列,但似乎都没有效果。任何人都可以分享一些亮点吗?

干杯

1 个答案:

答案 0 :(得分:1)

你的typedef让你烦恼不已。静态方法只是常规函数,恰好可以访问其类的受保护/私有静态成员。

将typedef更改为:

typedef string (*getMethodName)(void);

前一种语法适用于非静态成员方法。

例如,以下内容无法编译:

#include <iostream>
#include <string>

using namespace std;
class Foo {
public:
    typedef string (Foo::*staticMethod)();

    static staticMethod current;

    static string ohaiWorld() {
        return "Ohai, world!";
    }

    static string helloWorld() {
        return "Hello, world!";
    }

    static string callCurrent() {
        return Foo::current();
    }
};

Foo::staticMethod Foo::current = &Foo::ohaiWorld;

int main() {
    cout << Foo::callCurrent() << endl;
    Foo::current = &Foo::helloWorld;
    cout << Foo::callCurrent() << endl;
    return 0;
}

但是从

更改typedef
typedef string (Foo::*staticMethod)();

typedef string (*staticMethod)();

允许它编译 - 并按预期输出:

Ohai, world!
Hello, world!