繁体   English   中英

(C ++ 14)lambdas数组:错误:'name'声明为'auto'数组

[英](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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM