【发布时间】:2019-11-27 12:04:18
【问题描述】:
此代码不正确:
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<...> 必须输入什么类型?
【问题讨论】:
-
function<int(int)>,也不存储指向局部变量的指针,即fv.push_back(g); -
我不知道“功能”。你能给我解释一下吗?
-
std::function,它只是可复制对象的包装器。 -
一旦您使用捕获,您的 lambda 就与简单的函数原型不匹配。最好将其视为具有 operator() 和其他成员来处理捕获的临时类,并且它可能以这种方式实现。
std::function是一个模板,可以用()操作表示任何对象,包括 lambdas。 -
感谢您尝试疯狂的 lambda 向量。我仍然不确定如何在实践中使用它!