此代码不正确:
std::vector<int (*)(int)> fv;
for (int i=0; i<10; i++)
{
auto g = [i](int n) -> int
{
return n+i;
};
fv.push_back(&g);
}因为lambda函数不是int (*)(int)类型,而是一个对象。我的问题是:我必须在vector<...>中放入什么类型
发布于 2019-11-27 20:09:43
您可以使用库类型std::function。
例如:
#include <vector>
#include <functional>
void foo() {
std::vector<std::function<int(int)>> fv;
for (int i = 0; i < 10; ++i) {
fv.emplace_back([i](int n) {
return n + i;
});
}
}发布于 2019-11-27 21:23:01
原始代码的问题是lambda进行了捕获(索引i)。如果没有捕获,lambda将可以转换为指向函数的int(*)(int)指针,并且代码将被编译。
使用std::函数可以工作,但它会带来性能损失,所以更好的问题是,您打算用函数向量来解决什么问题?
https://stackoverflow.com/questions/59069837
复制相似问题