我正在使用C++制作一个简单的、基于文本的精灵宝可梦战斗模拟器。到目前为止,我有一个Pokemon类和一个Pokemon move类,每个类都有一个类型的成员变量。
现在我将类型存储为字符串- "fire","water",“gras”等。但我不确定这是否是存储信息的最佳方式,特别是因为我必须比较类型的伤害奖励/惩罚,这意味着必须解析整个字符串,而不是简单的常量。
枚举会是更好的选择吗?如果是这样的话,我是不是就像这样在头文件的开头为一个/两个类声明它们呢?
枚举PKMN_type ={火,水,草,... }
在大小/内存方面,使用枚举而不是字符串真的会对程序效率产生明显的影响吗?
谢谢。
发布于 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的不同幂来实现此目的:
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并手动实现相关的运算符。
发布于 2017-08-09 01:11:31
对于一个简单的非性能关键型程序,比较字符串和枚举可能并不重要。但是,由于枚举可以像字符串一样表达您的目的(而且可能会更快),我看不出有任何理由不使用它们。
顺便说一句,在新代码中,相对于旧式的enum,通常更喜欢类型安全的enum class。
https://stackoverflow.com/questions/45574213
复制相似问题