这是否合理地使用带有C ++继承层次结构的命名空间?

时间:2013-04-29 14:26:59

标签: c++ inheritance coding-style namespaces

这是一个与我最近写的代码类似的例子,事实证明这在工作中有点引起争议:

namespace Shape
{
    class Renderer
    {
    public:
        virtual void Draw () = 0;
    };
};

namespace Square
{
    class Renderer : public Shape::Renderer
    {
        virtual void Draw ();
    };
};

namespace Circle
{
    class Renderer : public Shape::Renderer
    {
        virtual void Draw ();
    };
};

重点是: 1)在继承层次结构中,大多数类具有相同的名称,但属于不同的名称空间 2)'Renderer'只是这些相同名称空间中的几个继承层次结构之一

我的问题是:这可能是合理使用命名空间,还是滥用命名空间? 有没有其他人以这种方式使用命名空间?

已经收到一些评论,如果我指出在我的实际编码中,命名空间实际上是不同的数据库技术,它似乎可能有助于讨论,所以一个是ADO,另一个是SQLite。因此,对我来说命名空间确实是有用的分组。

2 个答案:

答案 0 :(得分:4)

在我的意见中,这是对命名空间概念的滥用,因为您使用子命名空间垃圾邮件全局命名空间。

命名空间的目的是逻辑地对功能进行分组,而不需要使用超长名称和通过using子句使用方便的选项(仅限CPP - 从不在标题中)。

我会反转嵌套:

namespace Renderer
{
  class BasicShape
  {
    //...
  };

  class Circle: public BasicShape
  {};

  class Sqare: public BasicShape
  {};
}

答案 1 :(得分:4)

这是完全不同的,你需要一个非常强有力的理由,为什么你想这样编写你的代码。你的同事只是看着代码“这真的很奇怪”,而不是“这真的很奇怪,但它真的很聪明,因为X.”这不是滥用,它只是非常规的。但是如果没有足够令人信服的X因子,那么非传统就是坏事。