繁体   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