3 つのクラスclass BaseA
, class BaseB
and class DerivedC
(すべて前方宣言) があるとします。
class BaseA
{
public:
BaseA();
BaseA(const BaseB&);
};
と
class BaseB
{
public:
BaseB();
BaseB(const BaseA&);
};
ご覧のとおり、クラス A と B は「対称的に互換性がある」(私が発明したフレーズ) ため、それぞれを別のクラスに変換できます。
class DerivedC: virtual BaseA, virtual BaseB
{
public:
DerivedC();
DerivedC(const BaseA &a): BaseA(a), BaseB(a) {};
DerivedC(const BaseB &b): BaseA(b), BaseB(b) {};
void A() {
(BaseA)*this = (BaseB)*this;
};
};
これを行うためのよりエレガントで効率的な方法があるかどうか疑問に思っていました。DerivedC の BaseA 部分を DerivedC の BaseB 部分と同じに設定したいのですが、これらのクラスは低レベルで高頻度で使用されるため、最後の手段として高レベルのクラスのみを使用することを好みます。
編集: A と B の間の変換には、アークタンジェントと平方根が含まれます (それが何かわかりますか?)。でもキャストから離れたい。
編集:基本クラスには、継承する必要がある get-set と演算子がいくつかあります。