【发布时间】:2015-05-06 17:52:27
【问题描述】:
我在游戏中使用角色类的头文件(将其作为经验的辅助项目)。我有它的工作,但感觉就像我正在做这件事很长的路要走。我要求一个“int”来设置字符类,然后使用 switch 语句根据枚举位置设置它。是否有更清晰、更短的方法来执行此操作?我在这里做了什么会被认为是不好的做法吗?
class Character_Class {
public:
enum classofnpc { CLERIC, FIGHTER, ROGUE, WIZARD, BARBARIAN, DRUID, PALADIN, SORCERER, BARD, MONK, RANGER, WARLOCK };
Character_Class(const int& a, const int& b){
switch (a) {
case 0 :
a_class = CLERIC;
break;
case 1 :
a_class = FIGHTER;
break;
case 2 :
a_class = ROGUE;
break;
case 3 :
a_class = WIZARD;
break;
case 4 :
a_class = BARBARIAN;
break;
case 5 :
a_class = DRUID;
break;
case 6 :
a_class = PALADIN;
break;
case 7 :
a_class = SORCERER;
break;
case 8 :
a_class = BARD;
break;
case 9 :
a_class = MONK;
break;
case 10 :
a_class = RANGER;
break;
case 11 :
a_class = WARLOCK;
break;
}
lvl = b;
}
private:
classofnpc a_class;
int lvl;
};
【问题讨论】:
-
a_class = a;似乎更清晰。enums 默认从 0 开始递增 1。 -
@zch 是的,但只能进行额外检查 - 否则不安全。
int可以产生值,这超出了此枚举的范围。 -
顺便说一句,我建议只通过 const 引用传递大型类,对于原语,它是 not necessary,实际上它通常效率略低,你应该只通过值传递它们。
标签: c++ enums switch-statement