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