c++ - 为什么我不能在 C++11 中创建一个 lambda vector (相同类型)?

标签 c++ vector lambda c++11

我试图创建一个 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/

相关文章:

c++ - 如何使用 gdb 从核心文件中获取 lua 堆栈跟踪

java - boolean 值流,是真的吗?

lambda - 根本没有调用 lambda 函数中的代码

c# - 如何从 C# 中的 dll 导入访问/编码 char *变量

c++ - 如何捕获 X 中的任意键?

c++ - 使用数组中的值,包含多个 vector

C++ Lua用户数据与Mathfu浮点值混淆

R:在向量列表中找到向量

lambda - 在 lambda 函数内访问范围变量或实现相同 lisp 的替代方法

c++ - 如何使用 std::tuple 中的值作为函数参数?