【发布时间】:2016-11-22 06:26:39
【问题描述】:
在 C++ 中,可以将函数的声明和定义分开。例如,声明一个函数是很正常的:
int Foo(int x);
在Foo.h 中并在Foo.cpp 中实现它。是否可以用 lambdas 做类似的事情?例如,定义一个
std::function<int(int)> bar;
在bar.h 中并在bar.cpp 中实现它:
std::function<int(int)> bar = [](int n)
{
if (n >= 5)
return n;
return n*(n + 1);
};
免责声明:我在 C# 中使用过 lambda,但在 C++ 中使用的并不多。
【问题讨论】:
-
如果你要给 lambda 起一个名字,你也可以把它变成一个普通的函数。
-
@Brian 我知道,这是有道理的。我问这个问题的主要原因是好奇,我想知道它的可能性。
-
仅供参考;
std::function<int(int)>能够存储 lambda;但 lambda 没有std::function<...>类型;而是拥有自己独特的未命名类型。如果推导出变量的类型(通过auto或模板参数类型推导),您可以将 lambda 直接存储在变量中。std::function有一个模板构造函数,它能够通过模板参数类型推导的原理来获取一个 lambda 参数。 -
我们来看这个:int b; b = 13;您声明名称,而不是文字。您将如何声明 13,为什么?您的 lambda 类似于 13,
bar类似于b。 -
顺便说一下,C#中的区别是一样的。您似乎将 (C#) 委托与 (C#) lambda 混淆(本质上是:“匿名委托实现”)。在 C# 中,可以将 lambdas 分配给委托(变量),但它们不是一回事,就像在 C++ 中一样。
标签: c++ c++11 lambda declaration definition