C++ lambda的(C+;+;14)数组:错误:';名称';声明为';自动';

C++ lambda的(C+;+;14)数组:错误:';名称';声明为';自动';,c++,arrays,lambda,c++14,C++,Arrays,Lambda,C++14,我很难找出这个错误。我承认,我是C++新手,我的困难来自于不理解错误信息。 代码如下: auto selectionFuncs[8] = { [&](const Vector3& min, const Vector3& max) { return max.x_ == seamValues.x_ || max.y_ == seamValues.y_ || max.z_ == seamValues.z_; }, [&]

我很难找出这个错误。我承认,我是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’
通过谷歌搜索,似乎在C++11中不允许在这个实例中使用auto,但在C++14中应该使用auto,然而我必须以某种方式声明它是错误的,并且无法理解它


非常感谢您的帮助,谢谢

> C++语言禁止使用“<代码>自动< /代码>声明数组。您有两个很好的选择:函数指针和更好的-
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_; 
    },

    // ...
};
std::函数选择函数[8]=
{
[&](恒定矢量3和最小值,恒定矢量3和最大值)
{ 
返回max.x|max.y|max=seamValues.y|max.z|;
},
[&](恒定矢量3和最小值,恒定矢量3和最大值)
{ 
返回min.x_==seamValues.x_979;;
},
// ...
};

别忘了加入。然后,您只需像使用任何其他函数一样使用数组元素。

如果您只是为了代码方便而不是为了运行时选择而在数组中存储lambda,则不必将它们存储在数组中。元组可以做同样的事情:

auto selectionFuncs = std::make_tuple(
    [&](const Vector3& min, const Vector3& max) 
    { 
      return max.x_ == seamValues.x_ || max.y_ == seamValues.y_ || max.z_ == seamValues.z_;
    },
    //...

如果你真的想要运行时选择,你必须把lambda转换成<代码> STD::Stase< /Calp>S或函数指针(在另一个答案中进一步解释),因为C++类型的系统是如何与函数和lambdas工作的(lambdas是不同类型的,但是如果它们是无状态的,则可以被转换成它们各自的函数类型)。.

不能用
auto
声明数组,就这么简单。使用
std::function
数组来存储lambda.@dei在这种情况下,我可以看一些有帮助的例子吗?你能不能尽量展示一下语法?我会在谷歌的同时!感谢您的帮助。非常确定每个lambda的类型与任何其他lambda的类型无关(它们都是每次需要特定lambda时创建唯一函子实例的语法糖),即使它们表面上看起来是相同的(原型等),所以是的,需要像
std::function
这样的包装器。我明白了。我需要更多地阅读这篇文章来理解一切。我很好奇为什么模板中有bool类型。
bool
是封装lambda的返回类型。哦!这很有道理。谢谢你的快速帮助!