定义一个通过引用接收 int->int
lambda 参数的函数的正确方法是什么?
void f(std::function< int(int) >& lambda);
或
void f(auto& lambda);
我不确定最后一种形式是否合法。
还有其他方法可以定义 lambda 参数吗?
最佳答案
您不能拥有 auto
范围。你基本上有两种选择:
选项 #1:使用 std::function
如您所见。
选项#2:使用模板参数:
template<typename F>
void f(F && lambda) { /* ... */}
在某些情况下,选项 #2 可能更有效,因为它可以避免嵌入式 lambda 函数对象的潜在堆分配,但只有在 f
时才有可能。可以作为模板函数放置在标题中。它还可能会增加编译时间和 I-cache 占用空间,任何模板都可以。请注意,它也可能没有效果,好像 lambda 函数对象足够小,它可以在 std::function
中内联表示。对象。
别忘了使用 std::forward<F&&>(lambda)
引用 lambda
,因为它是一个 r 值引用。
关于c++ - 通过引用接收 lambda 作为参数的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6458612/