gpt4 book ai didi

c++ - 通过引用接收 lambda 作为参数的正确方法

转载 作者:IT老高 更新时间:2023-10-28 12:12:37 26 4
gpt4 key购买 nike

定义一个通过引用接收 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com