[英](C++14) Array of lambdas: error: 'name' declared as array of 'auto'
我很难搞清楚这个错误。 我承认,我是c ++的新手,我的困难来自于不理解错误信息。
这是代码:
auto selectionFuncs[8] =
{
[&](const Vector3& min, const Vector3& max)
{
return max.x_ == seamValues.x_ || max.y_ == seamValues.y_ || max.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.x_ == seamValues.x_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.x_ == seamValues.x_ && min.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.y_ == seamValues.y_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.x_ == seamValues.x_ && min.y_ == seamValues.y_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.y_ == seamValues.y_ && min.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.x_ == seamValues.x_ && min.y_ == seamValues.y_ && min.z_ == seamValues.z_;
}
};
这是错误:
error: ‘selectionFuncs’ declared as array of ‘auto’
从谷歌搜索,似乎在这个实例中使用auto是不允许在C ++ 11中但它应该在C ++ 14中,但是我必须以某种方式宣布它是错误的并且无法解决它。
非常感谢帮助,谢谢!
C ++语言禁止使用auto
声明数组。 你有两个很好的选择:函数指针甚至更好 - std::function
。 像这样的东西:
std::function<bool(const Vector3&, const Vector3&)> selectionFuncs[8] =
{
[&](const Vector3& min, const Vector3& max)
{
return max.x_ == seamValues.x_ || max.y_ == seamValues.y_ || max.z_ == seamValues.z_;
},
[&](const Vector3& min, const Vector3& max)
{
return min.x_ == seamValues.x_;
},
// ...
};
不要忘记#include <functional>
。 然后你就像使用任何其他函数一样使用数组的元素。
如果只是为了代码方便而不是为了运行时选择而将lambdas存储在数组中,则不必将它们存储在数组中。 元组可以做同样的事情:
auto selectionFuncs = std::make_tuple(
[&](const Vector3& min, const Vector3& max)
{
return max.x_ == seamValues.x_ || max.y_ == seamValues.y_ || max.z_ == seamValues.z_;
},
//...
但是如果你真的想要运行时选择,你必须将lambdas转换为std::function
或函数指针(在另一个答案中进一步解释),因为这就是C ++类型系统如何与函数和lambdas一起工作(Lambdas是不同的类型)但如果它们是无状态的,可以转换为它们各自的函数类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.