3

这是一个类似于我最近编写的代码的示例,它在工作中被证明有点争议:

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)“渲染器”只是这些相同命名空间中的几个继承层次结构之一

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

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

4

2 回答 2

4

在我看来,这是对命名空间概念的滥用,因为您使用子命名空间向全局命名空间发送垃圾邮件。

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

我会反转嵌套:

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

  class Circle: public BasicShape
  {};

  class Sqare: public BasicShape
  {};
}
于 2013-04-29T14:33:52.873 回答
4

完全不同的是,您需要一个非常有力的理由来说明为什么要以这种方式编写代码。你的同事只是在看“这真的很奇怪”的代码,而不是“这真的很奇怪,但是因为 X 而它真的很聪明”。这不是滥用,只是非常规。但如果没有足够令人信服的 X 因素,非常规是不好的。

于 2013-04-29T14:34:21.187 回答