我正在学习 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_caller
在我对 lambda 进行另一个定义时创建另一个版本来传递。
有没有办法避免它,除了使用std::function
?lambda 闭包没有任何泛型类型吗?