gpt4 book ai didi

c++ - 使用 lambda 作为参数:std::function 还是模板?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:30:23 25 4
gpt4 key购买 nike

我正在学习 c++11,对 lambda 特别感兴趣。

经过一些实践,我假设 lambda 闭包是一个无名函数对象。

所以我写了这段代码。

template <class callable_object>
void lambda_caller( callable_object lambda )
{
std::cout<< sizeof(lambda) << endl;
lambda();
}

我知道我可以使用 std::function 而不是使用模板,但我不想在类型转换时产生开销。

但是我在阅读这个问题时发现了一个问题:Why can't I create a vector of lambda in C++11?

回答者说,“每个 lambda 都有不同的类型 - 即使它们具有相同的签名。”。

编译器为不同的类生成不同的代码。

因此,我认为每当我对要传递的 lambda 进行另一个定义时,我的编译器都会生成另一个版本的 lambda_caller

除了使用 std::function 有什么办法可以避免吗? lambda 闭包没有泛型吗?

最佳答案

你无法避免它。 Lambda 只是一个重载了 operator()() 的类,它会执行您的代码。如此不同的代码 - 不同的类。

关于c++ - 使用 lambda 作为参数:std::function 还是模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14999138/

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