【问题标题】:Is it possible to write a c++ std::function that returns itself as a type? [duplicate]是否可以编写一个将自身作为类型返回的 c++ std::function? [复制]
【发布时间】:2018-11-19 15:12:58
【问题描述】:

让我们从一个简单的函数 typedef 开始:

typedef std::function<uint32_t(SomeStruct *)> HandlerFunction;

这里我们有一个函数,它返回一个 uint32_t 并接受一个指向 SomeStruct 的指针。

我想做的是修改这个函数,让它返回一个自己的类型,像这样:

typedef std::function<HandlerFunction(SomeStruct *)> HandlerFunction;

显然这不会编译,但它代表了我试图实现的最终目标。

【问题讨论】:

  • 这不是无限递归吗?我的函数接受X 并返回一个接受X 的函数并返回一个接受X 的函数并返回一个接受X 的函数...
  • 在我看来,你让这件事变得更难了。根据您想要做什么,functorsfunction pointers 可能是合适的。
  • 目标是单纯而简单的:一个非常简单的状态机。 “状态”将由一个函数表示。调用该函数将返回下一个“状态”,它只是另一个函数。也许它太聪明了。
  • @SergeyA - 它不必返回自己,它可以返回与签名匹配的不同函数。
  • 这与function returning itself的C问题非常相似。

标签: c++


【解决方案1】:

我不明白如何使用std::function 实现这一点。

但是,这段代码(使用仿函数)在 Visual Studio 2017 中编译和运行:

struct SomeStruct {};

struct Func
{
   Func operator()(SomeStruct*) { return *this; }
};

int main()
{
   Func f;
   Func f2 = f(nullptr);
}

【讨论】:

    【解决方案2】:

    很遗憾,这是不可能的。但是,如果您的目标是实现有限状态机 boost::statechart 可能会对您有所帮助

    【讨论】:

      猜你喜欢
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 2016-06-16
      • 1970-01-01
      • 2015-06-06
      • 2015-07-19
      相关资源
      最近更新 更多