gpt4 book ai didi

c++ - 对于带有自动参数的 lambda,是否有 std::function 类型或类似类型?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:59 26 4
gpt4 key购买 nike

当我将 lambda 分配给显式类型的变量时(例如,当它是递归的,以捕获函数本身时),我使用 std::function

以这个愚蠢的“位计数”函数为例:

std::function<int(int)> f;
f = [&f](int x){ return x ? f(x/2)+1 : 0; };

当我们使用自动参数泛化 x 时,如 C++14 泛型 lambda 中引入的那样,情况会怎样?

std::function<int(???)> f;
f = [&f](auto x){ return x ? f(x/2)+1 : 0; };

显然,我不能将 auto 放在 function 类型参数中。

是否有可能定义一个足够通用的仿函数类来涵盖上面的确切情况,但仍然使用 lambda 来定义函数?

(不要过度概括这一点,只接受一个自动参数并对返回值进行硬编码。)用例适用于上述场景:通过引用捕获函数本身以进行递归调用。

最佳答案

您可以通过将其作为参数传递给自身来创建一个调用自身的 lambda:

auto f = [](auto self, auto x) -> int {
return x ? self(self, x / 2) + 1 : 0;
};

std::cout << f(f, 10);

然后您可以在另一个 lambda 中捕获该 lambda,这样您就不必担心将它传递给自己:

auto f2 = [&f](auto x) {
return f(f, x);
};

std::cout << f2(10);

关于c++ - 对于带有自动参数的 lambda,是否有 std::function 类型或类似类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31285211/

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