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

时间:2014-09-18 17:46:27

标签: c++

有时在我的代码中会出现一个类(例如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,内联命名空间,使用)都没有起作用。可能吗?它不仅可以用于继承,还可以用于围绕某个中心类构建的任何组。

2 个答案:

答案 0 :(得分:1)

将命名空间名称设为小写。

答案 1 :(得分:0)

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

你有一个名称空间AI和一个结构AI,它不可能超出AI名称空间。

在任何合理的条件下,您的问题的答案是重命名其中一个。这只是糟糕的设计。