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