我正在学习 c++11,对 lambda 特别感兴趣。
经过一些实践,我假设 lambda 闭包是一个无名函数对象。
所以我写了这段代码。
template <class callable_object>
void lambda_caller( callable_object lambda )
{
std::cout<< sizeof(lambda) << endl;
lambda();
}
我知道我可以使用std::function
而不是使用模板,但我不想在类型转换时产生开销。
但我在阅读这个问题时发现一个问题:为什么我无法在 C++11 中创建 lambda 向量?
回答者说:“每个 lambda 都有不同的类型 - 即使它们具有相同的签名。”。
编译器为不同的类生成不同的代码。
所以我认为我的编译器会制作另一个版本lambda_caller
每当我对 lambda 进行另一个定义来传递时。
除了使用之外,有什么方法可以避免它std::function
?没有 lambda 闭包的泛型类型吗?
你无法避免它。 Lambda 只是一个重载了operator()() 的类,它会执行您的代码。所以不同的代码-不同的类。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)