在命名类时使用命名空间或前缀供应商的名称?

时间:2011-12-01 15:02:32

标签: c++ coding-style namespaces

目前我正在研究刚刚诞生的项目。以前的开发人员过去常常为每个类命名一个缩短的供应商名称,即CssMainWindow。 (Css代表酷软件解决方案)。

我的问题是:这里不应该使用namespace吗?然后,类的名称变得更好。

那是:

namespace Css {

    class MainWindow {
        //...
    };
}

这两种方法的(ad | dis)优势是什么?

4 个答案:

答案 0 :(得分:1)

附加前缀会使类名更长,输入时间更长。这是我能想到的唯一缺点。

使用名称空间....你可以放

using namespace Css;

在文件的开头,文件来源将随之丢失。

我想这最终取决于开发者。有两个原因我可以想到为什么有人想要识别课程:

1)对于所有权感。在这种情况下,添加前缀是IMO的方法。使用您的代码的人会知道它是您的代码:)。

2)对于将类分组在一起 - 在这种情况下,命名空间更有意义。

答案 1 :(得分:1)

这取决于。如果您的供应商特定类包含某些内容,例如。

  • tuplemake_tuple
  • stringvector

您可能希望使用前缀,以防止丑陋的ADL冲突 1 ,以及当人们期望使用using namespace XXX时的一般不便。热门图书馆已使用该策略(XString (Xalan)QString (Qt)CString (MFC)等)


1 What are the pitfalls of ADL?

答案 2 :(得分:1)

我的建议:始终使用命名空间!

我将展示命名空间的几个优点:

// MainWindow.h
namespace Css {
  class MainWindow {
    // ...
  };
}; 

// Other.cpp
namespace Css {
  // An advantage is you don't always need to write the namespace explicitly.  
  MainWindow* window; // Not Css::MainWindow or CssMainWindow. 
}

// In some cpp files
using namespace Css; // Never do this in header file or it will cause name pollution. 
MainWindow* window; // You don't need to write Css:: in the whole file. 

我不记得使用命名空间的任何缺点。

答案 3 :(得分:1)

首先要做的事情。

无论最终的选择是什么,都应尽可能避免在全局命名空间中编写任何内容。你有冒险在那里面临名字冲突。因此,您的软件应始终位于其自己的命名空间中,如果名称与您所依赖的库中使用的名称不同,则更好(提醒std已经保留)。

拥有此命名空间后,通常不再需要前缀。至少,不是项目名称。

然而,这主要是一个品味问题,我曾经看到过,在没有IDE的情况下,它更容易立即确定课程的来源......我个人认为它和过时的习惯继承自下进行。