我正在学习 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/