簡體   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