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

时间:2014-06-24 12:04:03

标签: c++ namespaces

我有一个从基类Entity派生的相当大的类层次结构。我想将这些类分组到一个单独的命名空间。目前,这看起来如下:

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有点不幸,所以我想知道这是不是一个好主意?在全局命名空间中添加using namespace Entitytypedef Entity::Entity Entity不起作用(因为这会与namespace Entity冲突)。它们可以添加到main但是......

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

1 个答案:

答案 0 :(得分:0)

  

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

我愿意。除了你指出的冲突之外,从内部引用命名空间也很尴尬(有时在命名空间范围内的名称隐藏在嵌套范围内时是必要的)。这两个问题都不是特别严重,但为什么要让生活变得更加艰难?

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

我倾向于对命名空间(lower_case)和类(Capitalised)使用不同的命名约定,但这可能不适合您的美学或任意公司指令。