優雅さ、カプセル化、およびADL(Argument Dependent Lookup)を利用するためには、関数の引数の名前空間の中に関数を定義するのが一般的です。バイナリ演算子に最適な名前空間は何ですか?
異なる名前空間に2つのライブラリがあるとします。 1)1つはライブラリの一部で、もう1つは第三者(例えばブースト)、2)私は両方を制御する、3)私はnone(単に "glue"コードを書く)の3つのケースがあります。
私はこのような何かを持って、私はAへの「ストリーム」Bしたい
namespace ns_A{
struct A{...}; // something that looks like iostream
}
namespace ns_B{
struct B{...};
}
は、最良の選択肢
namespace ???{ // what is more correct ns_A, or ns_B?
A& operator<<(A& a, B const& b){...}
}
または私は両方の名前空間に置くべきでしょうか?
namespace ns_B{
A& operator<<(A& a, B const& b){...}
}
namespace ns_A{
using ns_B::operator<<;
}
このようなバイナリ関数を定義するのに最適な名前空間はどれですか?
(C++ 11の名前空間をインラインで任意の勧告を変更していますか?)
(他のものが等しい場合、ので、私は例operator<<
を使用することががが直感的namespace ns_B
を好む方が良いようです。)
あなたが制御していない名前空間を嫌うことはありません。 – Walter