这是一个与我最近写的代码类似的例子,事实证明这在工作中有点引起争议:
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。因此,对我来说命名空间确实是有用的分组。
答案 0 :(得分:4)
在我的意见中,这是对命名空间概念的滥用,因为您使用子命名空间垃圾邮件全局命名空间。
命名空间的目的是逻辑地对功能进行分组,而不需要使用超长名称和通过using子句使用方便的选项(仅限CPP - 从不在标题中)。
我会反转嵌套:
namespace Renderer
{
class BasicShape
{
//...
};
class Circle: public BasicShape
{};
class Sqare: public BasicShape
{};
}
答案 1 :(得分:4)
这是完全不同的,你需要一个非常强有力的理由,为什么你想这样编写你的代码。你的同事只是看着代码“这真的很奇怪”,而不是“这真的很奇怪,但它真的很聪明,因为X.”这不是滥用,它只是非常规的。但是如果没有足够令人信服的X因子,那么非传统就是坏事。