【发布时间】:2020-10-19 09:33:26
【问题描述】:
我写了以下代码:
std::shared_ptr<mtm::Character>
Game::makeCharacter(CharacterType type, Team team, units_t health, units_t ammo, units_t range, units_t power) {
if (health <= 0 || ammo < 0 || range < 0 || power < 0)
{
throw mtm::IllegalArgument();
}
std::shared_ptr<Character> out = nullptr;
if (type == SOLDIER)
{
out = std::shared_ptr<Character>(new mtm::Soldier(team, health, ammo, range, power));
}
if (type == MEDIC)
{
out = std::shared_ptr<Character>(new mtm::Medic(team, health, ammo, range, power));
}
return out;
}
如您所见,我有某种代码重复,如果有 100 种类型怎么办...我将不得不编写 100 个 if 语句,这听起来并不完美。
有什么建议吗?
【问题讨论】:
-
这里不好提建议,因为不清楚
CharacterType type在调用makeCharacter时是如何确定的。您也许可以将CharacterType更改为模板参数,但这可能只是将那些if子句移动到另一个地方。如果您在多个位置有CharacterType type到类映射,那么您可以通过模板专业化对其进行概括,这样您就不需要在多个位置使用if子句。
标签: c++ class c++11 inheritance polymorphism