C++中的命名空间名称应该是单数还是复数

4
假设我们有一个包含多个策略类的命名空间:
namespace loggingPolicy {
    class OnWrite {...};
    class OnReadWrite {...};
    etc.
} // namespace

名称LoggingPolicy::OnWrite有意义。另一方面,这个命名空间实际上是一个类集合,名称loggingPolicies更能反映这一点。应该选择哪一个呢?
虽然我通常不遵循Google C++风格指南,但我查阅了它的命名空间命名约定,但它没有对这个问题提出任何意见。
附言:我正在进行一个独立项目,不受任何组织指导方针的约束。然而,我的框架希望被许多人使用,因此良好的符号约定非常重要。

1
这不是完全基于个人观点的问题吗? - πάντα ῥεῖ
@πάνταῥεῖ 我不确定这是否正确。如果答案很明确,我想找出来。 - AlwaysLearning
1个回答

6
没有任何技术上的支持或反对这些选择的论点。基本上,这只是一个封装选择,就像库名称或头文件名称一样。
如果你站在用户的角度考虑,有一些一致性的论点支持使用单数:
- 用户将使用您的 LoggingPolicy 框架。 - 如果您将其嵌入到自己的库中,则用户将使用 Policy 库。 - 如果您将所有声明公开在唯一的头文件中,则为 LoggingPolicy.h。 - 如果您使用复数形式,它会让用户感到困惑,因为他已经使用了 std 命名空间(而不是 stds 或 standards 命名空间,即使它封装了许多不同的标准领域)。同样适用于头文件:所有 C++ 头文件名称都为单数(例如 algorithm、iterator、string 都是单数,尽管提供许多不同的算法、迭代器或字符串)。
最后,今天您只公开策略类。但是,如果您也公开一些常见的辅助类或实用程序函数呢?复数则会给人一种这些对象是替代策略的印象,而实际上它们只是完善用于的策略。

我注意到你使用了 LoggingPolicy 而不是 loggingPolicy。这是有意为之吗?我认为小写字母作为首字母更好,因为它可以轻松地与类进行区分...(即使类也是命名空间,但仍然如此...) - AlwaysLearning
不,这不是故意的:我站在我的智能手机前面,屏幕不够大,无法检查您使用的大写约定;-) 我倾向于使用带下划线的小写或CapitalizedWords(例如类),并将initialLowercase保留给成员函数。但是,在此处必须始终遵循自己的约定。 - Christophe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接