我从 C + + 切换到 Java 和 C # ,认为那里名称空间/包的使用更好(结构良好)。然后我回到 C + + ,尝试以同样的方式使用名称空间,但是所需的语法在头文件中非常糟糕。
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
下面这些对我来说似乎也很奇怪(为了避免深刻的缩进) :
namespace MyCompany
{
namespace MyModule
{
namespace MyModulePart //e.g. Input
{
namespace MySubModulePart
{
namespace ...
{
public class MyClass
{
有没有一个更简短的方法来表达上面的东西? 我错过了一些东西,比如
namespace MyCompany::MyModule::MyModulePart::...
{
public class MyClass
更新
好吧,有人说 Java/C # 和 C + + 的使用概念是不同的。真的吗?我认为(动态)类加载并不是名称空间的唯一目的(这是一个非常技术性的观点)。为什么我不能用它来提高可读性和结构化,例如“智能感知”。
目前,在名称空间和您可以在其中找到的内容之间没有逻辑/粘合。Java 和 C # 做得更好... ... 为什么包括 <iostream>
和名称空间 std
?
好的,如果您说逻辑应该依赖于头部来包含,那么为什么 # include 不使用像 #include <std::io::stream>
或 <std/io/stream>
这样的“智能感知”友好语法呢?我认为缺省库中缺少的结构化是 C + + 与 Java/C # 相比的一个弱点。
如果避免冲突的唯一性是一点(这也是 C # 和 Java 的一点) ,那么最好使用项目名或公司名作为名称空间,您不这样认为吗?
一方面,人们说 C + + 是最灵活的... ... 但是每个人都说“不要这样做”? 在我看来,与 C # 相比,C + + 可以做很多事情,但是它的语法非常糟糕,即使对于很多情况下最简单的事情也是如此。
更新2
Most users say it is nonsense to create a deeper nesting than two Levels. Ok, so what about Windows::UI::Xaml and Windows::UI::Xaml::Controls::Primitives namespaces in Win8 development? I think Microsoft's usage of namespaces makes sense and it is indeed deeper than just 2 Levels. 我认为更大的库/项目需要更深的嵌套(我讨厌像 ExtraLongClassNameBecuseEveryThingIsInTheSameName 空间这样的类名... ... 然后你也可以把所有东西放到全局名称空间中)
更新3-结论
大多数人说“不要这样做”,但是... 即使是升级也有一个比一两个层次更深的嵌套。是的,它是一个库,但是: 如果你想要可重用的代码——把你自己的代码当作一个库,你会把它给别人。我还使用了更深层的嵌套,以便使用名称空间进行发现。