有时在我的代码中会出现一个类(例如AI),它是许多子类的接口,其名称都包含基类的名称(例如AIFighter,AIMage,AIThief ......)。唯一合乎逻辑的做法是组织它:
struct AI
{
virtual void think()=0;
};
namespace AI {
struct Fighter : public AI
{
void think()
{
//attack something
}
};
struct Mage : public AI
{
void think()
{
//burn something
}
};
//...
}
int main()
{
AI * ai = new AI::Fighter; // It's my target
}
但是我尝试的任何其他想法(typedef,内联命名空间,使用)都没有起作用。可能吗?它不仅可以用于继承,还可以用于围绕某个中心类构建的任何组。
答案 0 :(得分:1)
将命名空间名称设为小写。
答案 1 :(得分:0)
我不会用代码示例解决您的问题。原因是,你明显违反了我们以特定方式做事的原因。
你有一个名称空间AI
和一个结构AI
,它不可能超出AI名称空间。
在任何合理的条件下,您的问题的答案是重命名其中一个。这只是糟糕的设计。