非成员非朋友函数的命名空间的良好约定是什么?

时间:2012-12-11 13:28:30

标签: c++ namespaces

基于Scott Myers advice关于非成员朋友函数优先于成员函数,在大多数情况下它们是有意义的 - 建议用于设置名称空间的约定是什么?

特别是,如何避免将所有内容嵌套到命名空间中,最终避免使用可读性较低的代码。如:

namespace Vector
{  
   class Vector2 {...};
   bool IsUnitVector(const Vector2& vector);
}

导致如下呼叫:

Vector::Vector2 position;
if (Vector::IsUnitVector(position)) {...}

以下是否可以接受:

class Vector2 {...};
namespace Vector2
{
   bool IsUnitVector(const Vector2& vector);
}

允许更具可读性的呼叫,并按逻辑分组:

Vector2 position;
if (Vector2::IsUnitVector(position) {...}

1 个答案:

答案 0 :(得分:3)

您可以将它们分组到同一名称空间中,并依赖于依赖于参数的查找:

Vector::Vector2 position;
if (IsUnitVector(position)) {...}   // Magically resolves to Vector::IsUnitVector

定义一个与类名相同的命名空间最多会让人感到困惑,并可能导致歧义错误。