首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >成员函数返回到成员函数的指针

成员函数返回到成员函数的指针
EN

Stack Overflow用户
提问于 2013-10-25 21:55:11
回答 1查看 424关注 0票数 5

我希望有一个类,其成员函数返回指向成员函数的指针。

也就是说,就像:

代码语言:javascript
运行
复制
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++中使用类似的模式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-25 22:58:45

GotW上公然撕毁解决方案并使其适应成员函数:

代码语言:javascript
运行
复制
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),但我可能错了。对我来说,拥有一个空闲的状态,返回自己,似乎更直观。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19600044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档