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 に答える