这篇文章宣称使用 C++ Lambdas 是“便宜的”: Lambdas 不是魔法 - 第 2 部分
他们演示了如何将 lambda 传递给现有的 std 函数/模板。一篇文章演示了如何使用“auto”作为函数的返回类型以在不使用 std::function 的情况下返回 lambda。
我看到的任何文章都没有演示如何制作自己的函数,尤其是。类成员函数,采用 lambda 或更多,不使用 std::function。
所以这个大胆的“lambdas 很便宜”的声明 - 在现实世界的场景中真的是这样吗?
作为参考:“便宜”对我来说是为了解决这个问题:在具有数百 KB 内存和两位数 MHz 速度的嵌入式裸机项目中非常有用。(我一直在该领域使用 C++ 的一个健全的子集,并且正在寻找我可以使用的其他内容)
据我所知, std::function<> 并不便宜。一方面,作为 std::function 传递的 Lambda 显然无法再进行内联优化。但更糟糕的是, std::function<> 是 32 字节大。同样显然,如果捕获的超过适合,可能会使用动态分配?这一切听起来像是个坏消息。
因此,虽然我正在寻找不使用 std::function 使用 lambdas 的方法,并且只找到一个返回 auto 的示例,但我尝试了这个:我制作了一个非常简单的类,它使用“auto”作为成员函数中的参数类型,以及编译器似乎对它很满意(尽管它不像 std::function 就预期的函子参数而言是“自记录”代码)。
struct FuncyClass
{ unsigned func(auto fnx)
{ return 2 * fnx(7);
}
};
int main()
{ FuncyClass fc;
auto result = fc.func( [](auto x){return x*3;} );
printf("Result: …Run Code Online (Sandbox Code Playgroud)