【问题标题】:Use namespaces or prepend vendor's name when naming classes?命名类时使用命名空间或添加供应商名称?
【发布时间】:2011-12-01 15:02:31
【问题描述】:

目前我正在研究刚刚诞生的项目。以前的开发人员习惯于在每个类前面加上一个简短的供应商名称,即CssMainWindow。 (Css 代表 Cool Software Solutions)。

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

即:

namespace Css {

    class MainWindow {
        //...
    };
}

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

【问题讨论】:

    标签: c++ coding-style namespaces


    【解决方案1】:

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

    使用命名空间......好吧,你可以放

    using namespace Css;
    

    您的文件开头和文件来源将随之丢失。

    我想这最终取决于开发人员。我能想到为什么有人想要识别类有两个原因:

    1) 归属感。在这种情况下,附加前缀是 IMO,要走的路。使用您的代码的人会知道这是您的代码:)。

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

    【讨论】:

      【解决方案2】:

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

      • tuple, make_tuple
      • string, vector

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


      1What are the pitfalls of ADL?

      【讨论】:

        【解决方案3】:

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

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

        // 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. 
        

        我不记得使用命名空间有什么缺点。

        【讨论】:

        • 不能通过完全限定类型来解决命名冲突吗?诚实的问题,我不记得也没有时间测试。
        • 他们可以,但排位赛比写前缀 IMO 需要更多时间。
        【解决方案4】:

        首先要做的事情。

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

        一旦有了这个命名空间,通常就不再需要前缀了。至少,不是项目名称。

        然而,这主要是一个品味问题,我过去曾看到过这样的争论,即在没有 IDE 的情况下,它可以更容易地立即确定类的来源......我个人认为它和过时的习惯继承自C.

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-19
          • 1970-01-01
          • 2012-05-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多