C ++ Lambdas:返回函数返回函数的函数......?

时间:2015-08-08 14:30:10

标签: c++ c lambda functional-programming

C ++中是否有一种模式允许您返回一个函数,该函数本身返回一个函数。 例如

std::function<...> func = ...;
do
{
    func = func();
}
while (func);

在C中我认为你可以使用cast void * to void *(*)()来实现它。 所以你会有

typedef void* (*MyFunc)(void);
MyFunc func = ...
do
{
    func = (MyFunc)func();
}
while(func);

是否可以用lambdas实现?

1 个答案:

答案 0 :(得分:2)

您的C示例无效ISO C.可以使用仅在C中有效的功能在C ++中完成:

typedef void (*func_type)();
typedef func_type (*func_func_type)();

int i = 5;
func_type f() { return --i ? (func_type)f : 0; }

int main()
{
  func_func_type func = f;
  do
  {
    func = (func_func_type)func();
  }
  while(func);
}

你不能重写这个直接使用lambdas,因为lambda不能引用它自己(如f那样),但你可以将lambda转换为函数指针,保留一个函数指针的转换键入到另一个,并将其存储在std::function中,如下所示:

#include <functional>

typedef void (*func_type)();
typedef func_type (*func_func_type)();

int i = 5;
func_func_type f = (func_func_type)[]{ return --i ? (func_type)f : nullptr; };

int main()
{
  std::function<func_type()> func = f;
  do
  {
    func = (func_func_type)func();
  }
  while(func);
}