调用从静态方法

问题描述:

静态函数指针我在Individual.hpp文件下面的代码:调用从静态方法

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

这对我的.cpp文件:

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

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

Expected unqualified-id

我已经尝试了所述代码的多个排列,但似乎没有任何工作。任何人都可以分享一些光?

干杯

+0

作为非静态成员函数的指针,'currentFitnessMethodName'需要调用'Individual'对象。在你的静态函数'getCurrentFitnessMethodName'中,没有'this'指针。你有另外一个可以在那里使用的“个人”对象吗? – aschepler

+0

为什么使用静态和函数指针而不是使用object.method正确执行它? – stark

+0

@aschepler,不,我不知道。我只是把它作为一个例子来描述。 –

你的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 string (Foo::*staticMethod)(); 

的的typedef

typedef string (*staticMethod)(); 

允许它来编译 - 并如预期的那样输出:

Ohai, world! 
Hello, world!