gpt4 book ai didi

c++ - 成员函数返回指向成员函数的指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:03 25 4
gpt4 key购买 nike

我想要一个带有成员函数的类,该类返回指向成员函数的指针。

也就是说,类似于:

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;
}

基本上,我尝试做的是实现一个状态机,其中每个状态现在都是下一个状态并通过函数指针返回它。

注意:我对其他实现状态机的方法不感兴趣。我真的很想知道它是否可以像上面那样实现。

背景:我从这个演讲中得到启发:http://www.youtube.com/watch?v=HxaD_trXwRE并想知道是否可以在 C++ 中使用类似的模式。

最佳答案

公然抄袭 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)的好选择,但我在那里可能是错的。对我来说,拥有一个可以自行返回的空闲状态似乎更直观。

关于c++ - 成员函数返回指向成员函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19600044/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com