我试图创建一个 lambda vector ,但失败了:
auto ignore = [&]() { return 10; }; //1
std::vector<decltype(ignore)> v; //2
v.push_back([&]() { return 100; }); //3
到第 2 行,它 compiles fine .但是第 3 行给出了 compilation error :
error: no matching function for call to 'std::vector<main()::<lambda()>>::push_back(main()::<lambda()>)'
我不需要函数指针 vector 或函数对象 vector 。但是,封装真实 lambda 表达式的函数对象 vector 对我来说是可行的。这可能吗?
最佳答案
每个 lambda 都有不同的类型——即使它们有相同的签名。如果你想做类似的事情,你必须使用一个运行时封装容器,比如 std::function
。
例如:
std::vector<std::function<int()>> functors;
functors.push_back([&] { return 100; });
functors.push_back([&] { return 10; });
关于c++ - 为什么我不能在 C++11 中创建一个 lambda vector (相同类型)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17893568/