C++ 使用命名空间隔离类的层次结构

C++ 使用命名空间隔离类的层次结构,c++,namespaces,C++,Namespaces,我有一个相当大的从基类实体派生的类层次结构。我想将这些类分组到一个单独的名称空间中。目前,情况如下所示: namespace Entity { class Entity { //... }; class A : public Entity { // Instead of AEntity from before. //... }; class B : public Entity { // Instead of BEnt

我有一个相当大的从基类实体派生的类层次结构。我想将这些类分组到一个单独的名称空间中。目前,情况如下所示:

namespace Entity {
    class Entity {
        //...
    };

    class A : public Entity {  // Instead of AEntity from before.
        //...
    };

    class B : public Entity {  // Instead of BEntity from before.
        //...
    };
}

int main() {
    // Example usage:
    Entity::Entity *entity = new Entity::B();
    delete entity;
}
不得不写Entity::Entity有点不幸,所以我想知道这是否是个好主意?在全局命名空间中使用namespace实体或typedef实体::实体实体添加不起作用,因为这将与命名空间实体冲突。它们可以添加到主菜单中

我是否应该避免将名称空间命名为与其中的基类相同的名称空间?还是这是常见的做法

我是否应该避免将名称空间命名为与其中的基类相同的名称空间

我会的。正如您所指出的冲突一样,从名称空间本身引用名称空间会很尴尬,有时当名称空间范围内的名称隐藏在嵌套范围内时,这是必要的。这两个问题都不是特别严重,但为什么要让生活变得更加艰难呢

您可以调用名称空间实体,因为它包含多个实体类型;和/或可能调用基类base,因为名称空间完成了对其基础的描述


我倾向于对名称空间使用不同的命名约定(小写和大写),但这可能不符合您的审美观或任意的公司指令。

我们的命名约定规定名称空间和类型应使用PascalCase,但使用复数形式是一个好主意,谢谢!