目前我正在研究刚刚诞生的项目。以前的开发人员过去常常为每个类命名一个缩短的供应商名称,即CssMainWindow
。 (Css代表酷软件解决方案)。
我的问题是:这里不应该使用namespace
吗?然后,类的名称变得更好。
那是:
namespace Css {
class MainWindow {
//...
};
}
这两种方法的(ad | dis)优势是什么?
答案 0 :(得分:1)
附加前缀会使类名更长,输入时间更长。这是我能想到的唯一缺点。
使用名称空间....你可以放
using namespace Css;
在文件的开头,文件来源将随之丢失。
我想这最终取决于开发者。有两个原因我可以想到为什么有人想要识别课程:
1)对于所有权感。在这种情况下,添加前缀是IMO的方法。使用您的代码的人会知道它是您的代码:)。
2)对于将类分组在一起 - 在这种情况下,命名空间更有意义。
答案 1 :(得分:1)
这取决于。如果您的供应商特定类包含某些内容,例如。
tuple
,make_tuple
string
,vector
您可能希望使用前缀,以防止丑陋的ADL冲突 1 ,以及当人们期望使用using namespace XXX
时的一般不便。热门图书馆已使用该策略(XString (Xalan),QString (Qt),CString (MFC)等)
答案 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的情况下,它更容易立即确定课程的来源......我个人认为它和过时的习惯继承自下进行。