我正在学习C ++ 11拉姆达特别感兴趣。
有些做法后,我认为拉姆达闭包是一个匿名函数对象。
所以我写了这个代码。
template <class callable_object>
void lambda_caller( callable_object lambda )
{
std::cout<< sizeof(lambda) << endl;
lambda();
}
我知道,我可以使用std::function
而不是使用模板,但我不希望开销,同时类型转换。
但我发现一个问题,读了这个问题: 为什么我不能创建拉姆达在C ++ 11的载体?
回答者说,“每个拉姆达具有即使它们具有相同的签名不同的类型 - ”。
编译器可以为不同类别不同的代码。
所以,我认为我的编译器将使另一个版本lambda_caller
每当我做拉姆达的另一种定义来传递。
有什么办法避免它,但使用std::function
? 难道没有任何泛型类型为拉姆达关闭?