Base、A、および B クラスを持つダイアモンド内にあるクラス C があります。メソッド Base::foo() があり、クラス A と B の両方でオーバーライドされます。C::foo を呼び出すと、 ()、A::foo() ではなく、B::foo() を呼び出したい。
これを行う方法の 1 つは、A を Base から仮想的に継承させ、B を通常どおり継承させることであると主張しています。そうすれば、C::foo() を再実装することなくこれを実現できます。
ただし、Base の 2 つのコピーが作成されるのを避けるために、A と B の両方を仮想として宣言する必要があるように思われるため、これが可能かどうかに関する他の情報は見つかりませんでした。
提案されたソリューションは正しいですか?