C ++中的多个或单个命名空间名称

时间:2016-09-29 06:02:56

标签: c++ namespaces naming-conventions

假设我们有一个包含多个策略类的命名空间:

namespace loggingPolicy {
    class OnWrite {...};
    class OnReadWrite {...};
    etc.
} // namespace

名称LoggingPolicy::OnWrite有意义。另一方面,这个命名空间实际上是一个类的集合,名称loggingPolicies会更好地反映出来。应该选择哪一个?

虽然我一般不会遵循Google C ++样式指南,但我确实查找了naming conventions for namespaces,但在此问题上没有任何说法。

P.S。我正在从事一个独立的项目,不受任何组织的指导。但是,我的框架有望被许多人使用,所以好的符号样式很重要。

1 个答案:

答案 0 :(得分:5)

对于任何此选择,都没有技术论据支持或反对。基本上它是一个包装选择,如库名称或标题名称。

如果你把自己放在用户一边,有一些一致性论据支持单数:

  • 用户将使用您的LoggingPolicy框架。
  • 如果您将其嵌入自己的库中,则用户将使用策略库
  • 如果您在一个唯一的标题中公开所有声明,那么它将是LoggingPolicy.h
  • 如果您使用复数形式,则会使用户感到困惑,因为他已经使用了std命名空间(而不是stds或standards命名空间,即使它封装了许多不同的标准区域)。标题相同:所有c ++标题名称都是单数的(例如算法,迭代器,字符串都是单数形式,尽管提供了许多不同的算法,迭代器或字符串。

最后,今天您只公开策略类。但是如果你还暴露了一些常见的帮助器类或实用程序函数呢?复数将给人的印象是这些对象是替代政策,而实际上他们只完成了它所用的政策。