c++命名空间使用和命名规则

标签 c++ namespaces

在该项目中,我们正试图就命名空间的使用达成一致。 我们决定第一层是“productName”,第二层是“moduleName”。

productName::moduleName

现在如果模块是一种实用模块,那么添加第三个命名空间没有问题。例如添加“str”:productName::utilityModuleName::str - 划分所有“字符串”相关内容的空间。

如果模块是主要业务模块,我们有很多机会,几乎没有协议(protocol)。

例如

class productName::mainModuleName::DomainObject

class productName::mainModuleName::DomainObjectSomethingElseViewForExample

都可以在

namespace productName::mainModuleName::domainObject
class Data
class ViewForExample

为什么我们应该创建内部而不是私有(private)类而不是命名空间? 为什么我们要创建所有方法都是静态的类(除了这个类将成为模板参数的情况)?

项目包含 1Gb 的源代码。 那么,在 c++ 中,在命名空间上划分模块的最佳做法是什么?

最佳答案

命名空间的用途:

命名空间仅用于建立上下文,因此您不会遇到命名冲突。

一般规则:

不需要指定过多的上下文,并且会带来比其值(value)更多的不便。

所以你想用你最好的判断,但仍然遵循这两条规则:

  • 使用命名空间时不要太笼统
  • 使用命名空间时不要太具体

我不会对如何使用命名空间名称如此严格,而是简单地使用基于相关代码组的命名空间。

为什么过于笼统的命名空间没有帮助:

以产品名称开头划分命名空间的问题在于,您通常会有一个代码组件,或者多个产品共有的一些基础库。

您也不会在 Product1 中使用 Product2 命名空间,因此明确指定它是没有意义的。如果您将 Product2 的文件包含在 Product1 中,那么这种命名转换还有用吗?

为什么过于具体的命名空间没有帮助:

当您拥有过于具体的命名空间时,这些不同的命名空间之间的界限开始变得模糊。您开始来回使用彼此内部的命名空间。这时候最好把通用代码一起泛化到同一个命名空间下。

具有所有静态与模板的类:

"Why should we create inner not private classes and not namespaces? Why should we create classes where all methods are static"

一些区别:

  • 可以使用 using 关键字来隐含命名空间
  • 命名空间可以是别名,类是类型并且可以定义类型
  • 可以添加命名空间;您可以随时为其添加功能并直接添加到其中
  • 不创建新的派生类就无法添加类
  • 命名空间可以有前向声明
  • 通过类,您可以拥有私有(private)成员和 protected 成员
  • 类可以与模板一起使用

具体怎么划分:

"Project consist of 1Gb of source code. So, what is the best practice to divide modules on namespaces in the c++?"

在没有确切源代码的情况下准确地说出如何划分代码太主观了。根据模块进行划分虽然听起来合乎逻辑,但不是整个产品。

关于c++命名空间使用和命名规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/603378/

相关文章:

c++ - 如何调用移动构造函数?

c++ - 无法在 ubuntu 上的 netbeans 中进入 C++ 程序像素城市

c++ - 为什么这个程序在调用函数时会出现段错误?

c++ - 在 C++ 中使用 rand() 函数的正确方法是什么?

php - 从命名空间中的变量名实例化一个新类

c++ - 在 C++ 中使用::限定的命名空间

php - 全局辅助函数应该命名空间吗?

C++ Boost TCP channel 上的序列化对象,双向通信不起作用

ruby-on-rails - Rails 5 命名空间需要(在 Controller 中)或不需要(在模型中)指定模块名称

python - 从 python 调试器将变量保存到交互式命名空间