2

根据Scott Myers关于在大多数情况下优先使用非成员朋友函数而不是成员函数的建议,它们是有意义的 - 设置命名空间以执行此操作的推荐约定是什么?

特别是,您如何避免将所有内容嵌套到名称空间中并最终导致可读性较差的代码。如:

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) {...}
4

1 回答 1

3

您可以将它们分组在同一个命名空间中,并依赖于参数相关的查找:

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

定义与类同名的命名空间充其量是令人困惑的,并且可能导致歧义错误。

于 2012-12-11T13:50:02.713 回答