C++:类的名称与命名空间的名称相同

C++: class' name identical with namespace's

本文关键字:命名空间 C++      更新时间:2023-10-16

有时在我的代码中会出现一个类(例如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
}

但它和我尝试过的任何其他想法(typedefs、内联命名空间、using)都不起作用。有可能吗?它不仅在继承中有用,而且在任何围绕某个中心类构建的组中也有用。

使名称空间名称小写。

我不会用代码示例来解决您的问题。原因是,你显然违反了我们以特定方式做事的理由。

您有一个名称空间AI和一个结构AI,它位于AI名称空间之外,令人费解。

用任何合理的术语来说,你的问题的答案都是重命名其中一个。这只是一个糟糕的设计。