次のような状況があります。
class B;
class A {
private:
int n;
public:
A& operator=(const A& a) {
}
A& operator=(const int n) {
this->n = n;
}
friend class B;
};
class B {
private:
A a;
public:
operator A&() {
return a;
}
operator int&() {
return a.n;
}
};
このコードを実行すると:
A a;
B b;
int i = b;
a = b;
a = i;
次のエラーがあります。
error C2593: 'operator =' is ambiguous
..\CrossPPTest\TestProxy.cpp(40): could be 'A &A::operator =(const int)'
..\CrossPPTest\TestProxy.cpp(37): or 'A &A::operator =(const A &)'
while trying to match the argument list '(A, B)'
追加できないと仮定して、このあいまいさを解決する方法
A& operator =(const B&)
クラスAへ。
なぜこのようにしなければならないのかには複雑な理由がありますが、このようなことがうまくいくなら本当に素晴らしいことです.
いくつかの優先順位や演算子の明示的なキーワードのようなものがあるかもしれません...どんな提案も大歓迎です。
更新: コードの 2 番目の部分では、どのような種類のキャストも使用できません。問題は、最初のコード部分のみを変更する解決策を見つけることです。
もう 1 つの更新: コード部分 #2 はそのままコンパイルする必要があります。