簡體   English   中英

std :: multimap中的c ++枚舉類

[英]c++ enum class inside std::multimap

我有2個enum ,它們是較新的枚舉類類型。

enum class Action
{
    Move,
    Attack,
    Die,
    Splash,
    Idle
};

enum class Facing
{
    Left,
    LeftUp,
    LeftDown,
    Up,
    Down,
    Right,
    RightUp,
    RightDown
};

我想將這些東西存儲在多圖內:

std::multimap<Entity::Facing,std::pair<Entity::Action,std::unique_ptr<Animation>>> listAnimation;

關鍵是:面對,對是實體+動畫的動作。

這是我插入它的方式:

std::unique_ptr<Animation> splashUp (new Animation());
splashUp->setSpriteSheet(*texture);
splashUp->addFrame(sf::IntRect(3584,256,128,128));
splashUp->addFrame(sf::IntRect(3712,256,128,128));
splashUp->addFrame(sf::IntRect(3840,256,128,128));
splashUp->addFrame(sf::IntRect(3968,256,128,128));
splashUp->addFrame(sf::IntRect(4096,256,128,128));
splashUp->addFrame(sf::IntRect(4224,256,128,128));
splashUp->addFrame(sf::IntRect(4352,256,128,128));
splashUp->addFrame(sf::IntRect(4480,256,128,128));

this->listAnimation.insert(Entity::Facing::Up, std::make_pair(Entity::Action::Splash, std::move(splashUp)));

這是即使經過大量谷歌搜索也無法繞過我的錯誤:

錯誤C2664:'std :: _ Tree_iterator <_Mytree> std :: multimap <_Kty,_Ty> :: insert(std :: _ Tree_const_iterator <_Mytree>,const std :: pair <_Ty1,_Ty2>&)':無法轉換參數1從'Entity :: Facing'到'std :: _ Tree_const_iterator <_Mytree>'1>
用1> [1>
_Mytree = std :: _ Tree_val >>>>,1> _Kty = Entity :: Facing,1>
_Ty = std :: pair>,1> _Ty1 = const Entity :: Facing,1> _Ty2 = std :: pair> 1>] 1>和1> [1>
_Mytree = std :: _ Tree_val >>>> 1>] 1>沒有可用的用戶定義轉換運算符可以執行此轉換,否則無法調用該運算符

我可以完全將enum類用作multimap中的Key嗎?

multimap<Key, Value>::insert()僅采用一個參數,該參數應可轉換為std::pair<const Key, Value>

為了方便起見,並可能為了提高速度(因為不必創建臨時pair ),可以改用emplace()

listAnimation.emplace(Entity::Facing::Up, std::make_pair(Entity::Action::Splash, std::move(splashUp)));

如果您在文檔中檢查multimap::insert ,您會發現沒有一種方法的簽名與您要嘗試的匹配。 方法是:

單個元素(1) iterator insert (const value_type& val); 帶有提示(2) iterator insert (iterator position, const value_type& val); range (3) iterator insert (iterator position, const value_type& val); range (3)模板void插入(首先輸入InputIterator,最后輸入InputIterator);`

您試圖在對象中插入一個值,即(1),但是編譯器感到困惑,因為函數arity使它看起來像后者2。

為了插入一個值,您需要創建一個對,即insert(make_pair(...)) 作為一種特殊情況,每個數據在您的情況下也都映射為一對,因此最終將是insert(make_pair(..., make_pair(...)))

在任何情況下,沒有insert ,需要一個鍵和映射為兩個參數,因為你正在嘗試做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM