c++中名称空间的复数或单数

Plural or singular namespace names in C++

本文关键字:单数 空间 c++      更新时间:2023-10-16

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

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

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

虽然我一般不遵循Google c++风格指南,但我确实查找了其命名空间的命名约定,但它没有任何关于这个问题的说明。

注:我正在做一个独立的项目,不受任何组织的指导方针的约束。然而,我的框架希望被很多人使用,所以好的符号风格很重要。

对于这种选择没有技术上的支持或反对。基本上,这是一个打包选择,就像库名或标题名一样。

如果你站在用户的立场上,有一些一致性的论点支持单数:

  • 用户将使用您的logingpolicy框架。
  • 如果你将它嵌入到自己的库中,用户将使用Policy库
  • 如果你要在一个唯一的头文件中公开你的所有声明,它将是LoggingPolicy.h
  • 如果使用复数形式,则会使用户感到困惑,因为他已经使用了std名称空间(而不是std或standards名称空间,即使它封装了许多不同的标准领域)。头文件也是如此:所有c++头文件名称都是单数形式(例如algorithm, iterator, string),尽管提供了许多不同的算法、迭代器或字符串,但它们都是单数形式。

最后,今天您只公开策略类。但是,如果还公开一些常见的helper类或实用程序函数呢?复数形式给人的印象是这些对象是可选策略,而实际上它们只完成了它所用于的策略。