グローバル名前空間で二項演算子を定義したいと思います。オペレーターは、別の名前空間で定義されているクラスで動作し、オペレーターはそのクラスのプライベート メンバーにアクセスする必要があります。私が抱えている問題は、クラス定義でグローバル演算子をフレンドにするときに、そのグローバル演算子をスコープする方法がわからないことです。
私は次のようなものを試しました:
namespace NAME
{
class A {
public:
friend A ::operator * (double lhs, const A& rhs);
private:
int private_var;
};
}
A operator * (double lhs, const A& rhs)
{
double x = rhs.private_var;
...
}
コンパイラ (g++ 4.4) は、それをどう処理するかを知りませんでした。ラインのようです
friend A ::operator * ()
(疑似コード)のようなものとして評価されます
(A::operator)
それ以外の
(A) (::operator)
演算子の宣言で :: を省略した場合、コンパイルは機能しますが、演算子は名前空間 NAME にあり、グローバル名前空間にはありません。
このような状況でグローバル名前空間を修飾するにはどうすればよいですか?