首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pokemon类型的枚举常量

Pokemon类型的枚举常量
EN

Stack Overflow用户
提问于 2017-08-09 01:06:38
回答 2查看 410关注 0票数 0

我正在使用C++制作一个简单的、基于文本的精灵宝可梦战斗模拟器。到目前为止,我有一个Pokemon类和一个Pokemon move类,每个类都有一个类型的成员变量。

现在我将类型存储为字符串- "fire","water",“gras”等。但我不确定这是否是存储信息的最佳方式,特别是因为我必须比较类型的伤害奖励/惩罚,这意味着必须解析整个字符串,而不是简单的常量。

枚举会是更好的选择吗?如果是这样的话,我是不是就像这样在头文件的开头为一个/两个类声明它们呢?

枚举PKMN_type ={火,水,草,... }

在大小/内存方面,使用枚举而不是字符串真的会对程序效率产生明显的影响吗?

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-08-09 01:26:03

使用enums将有几个好处,包括代码速度,类型安全,并确保您在意外尝试制作盗版口袋妖怪时更早地发现它。

由于这是C++,我通常会建议将其设置为enum class,而不仅仅是enum。然而,由于口袋妖怪可以有多种类型,你可能想做一些有something like FLYING|NORMAL to mean “both FLYING and NORMAL的事情,你可以用一个普通的enum比一个enum class更容易做到这一点。您可以通过将每种类型设置为2的不同幂来实现此目的:

代码语言:javascript
复制
enum pokemon_type {
    NORMAL = 1,
    FIRE = 2,
    FIGHTING = 4,
    WATER = 8,
    // ...
    // Depending on design, a `std::map` might be better, but you could do this:
    VULNERABLE_TO_FIRE = GRASS | ICE | BUG | STEEL,
    RESISTANT_TO_FIRE = FIRE | WATER | ROCK,
    IMMUNE_TO_FIRE = 0,  // Nothing is outright immune to fire
    // ...
};

在一个不太简单的应用程序中,我建议使用enum class并手动实现相关的运算符。

票数 3
EN

Stack Overflow用户

发布于 2017-08-09 01:11:31

对于一个简单的非性能关键型程序,比较字符串和枚举可能并不重要。但是,由于枚举可以像字符串一样表达您的目的(而且可能会更快),我看不出有任何理由不使用它们。

顺便说一句,在新代码中,相对于旧式的enum,通常更喜欢类型安全的enum class

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45574213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档