【问题标题】:Remembering state c++记住状态 c++
【发布时间】:2012-09-20 13:24:36
【问题描述】:

我的应用程序让我调用了一堆回调,这些回调需要知道它们的最后状态或最后调用的状态。一个简单的实例是两次连续调用之间的时间差。

我知道 c++ 中的函数对象是一种通用的方法。但我是一个 nOOb,不知道如何设置这个模式。任何帮助或具体的简单代码示例将不胜感激。

【问题讨论】:

  • 嗯...回调/状态机可能不是你想如何开始学习 C++....
  • 另外,你应该考虑阅读一本关于 C++ 的好书。
  • 在 C++11 引入绑定 lambda 之前,回调函数在 C++ 中是一个已知的难题。现在他们很好。如果可以的话,你应该使用 C++11 lambdas。

标签: c++ function object state


【解决方案1】:

只需创建一个实现 operator() 的类。例如,

class F {
    int state;
public:
    int operator()(/*any parameters would go here*/){
        return state++;
    }
    F() : state(0) {}
};

然后您可以创建可调用并保留状态的实例。

F f;
f(); //returns 0
f(); //returns 1

【讨论】:

  • 它与本例中也可以调用并用于计算状态值的泛型函数有何不同
  • @user1247384:它是一个对象,所以它可以记住它的状态。
  • 谢谢,我想这个想法是,如果我编写一个通用的 getter 函数来获取状态,我将无法记住它,就像获取最后一个调用值一样。在上面,我们通过简单的调用就知道了最后一个值。这看起来公平吗?
【解决方案2】:

如果你想要一个好的状态框架而不是使用 FSM。很少有像这样受欢迎的:

http://boost-extension.redshoelace.com/docs/boost/fsm/doc/reference.html

http://www.boost.org/doc/libs/1_51_0/libs/msm/doc/HTML/index.html

这对新手来说有点复杂,但你会学到很多东西。您甚至可以实现自己的虚拟版本(没那么复杂)。

Fsms 在嵌入式世界中非常有用,在示例类中可以有 20 个状态。

【讨论】:

    猜你喜欢
    • 2014-07-29
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 2011-12-10
    • 2017-10-07
    • 2014-07-30
    • 1970-01-01
    • 2016-11-09
    相关资源
    最近更新 更多