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