我希望有一个类,其成员函数返回指向成员函数的指针。
也就是说,就像:
class Foo {
// typedef ????(Foo::* func)????
public:
Func s1();
Func s2();
Func s3();
}
Func Foo::s1() {
// do stuff
return &Foo::s2;
}
Func Foo::s2() {
// do stuff
return &Foo::s3;
}
Func Foo::s3() {
// do stuff
return 0;
}基本上,我要做的是实现一个状态机,其中每个状态现在是下一个状态,并通过一个函数指针返回它。
注意:我对实现状态机的其他方法不感兴趣。我真的很想知道它是否能以类似于上面的方式实现。
上下文:我受到了这个演讲的启发:trXwRE,并想知道是否可以在C++中使用类似的模式。
发布于 2013-10-25 22:58:45
在GotW上公然撕毁解决方案并使其适应成员函数:
class Foo {
public:
struct FuncPtrRet;
typedef FuncPtrRet(Foo::*FuncPtr)();
struct FuncPtrRet {
FuncPtrRet(FuncPtr pp) : p(pp) { }
operator FuncPtr() { return p; }
FuncPtr p;
};
FuncPtrRet s1() { return &Foo::s2; }
FuncPtrRet s2() { return &Foo::s3; }
FuncPtrRet s3() { return &Foo::s3; }
};
int main() {
Foo test;
Foo::FuncPtr state = test.s1();
state = (test.*state)();
state = (test.*state)();
state = (test.*state)();
state = (test.*state)();
state = (test.*state)();
return 0;
}这似乎适用于Clang 3.3。我不认为返回0是空闲状态的好选择(这里是s3),但我可能错了。对我来说,拥有一个空闲的状态,返回自己,似乎更直观。
https://stackoverflow.com/questions/19600044
复制相似问题