调用从静态方法
问题描述:
静态函数指针我在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
我已经尝试了所述代码的多个排列,但似乎没有任何工作。任何人都可以分享一些光?
干杯
答
你的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!
作为非静态成员函数的指针,'currentFitnessMethodName'需要调用'Individual'对象。在你的静态函数'getCurrentFitnessMethodName'中,没有'this'指针。你有另外一个可以在那里使用的“个人”对象吗? – aschepler
为什么使用静态和函数指针而不是使用object.method正确执行它? – stark
@aschepler,不,我不知道。我只是把它作为一个例子来描述。 –