2つのクラス階層があります。
BaseUnit <- S1Unit , BaseUnit <- S2Unit, ..S3Unit, S4Unit
と
Base <- S1 , Base <- S2
にBase
ユニットの値を保存しました。
class Base {
protected: BaseUnit unit; // actually this is an upcast of S1Unit, S2Unit
// of course I do several things with unit on methods of Base
}
これはS1Unit、S2Unitに基づいています。
S1::S1(S1Unit s1unit) : unit(s1unit) { .. }
しかし、S1で専用ユニットを返却したい場合、どうすればよいでしょうか。
S1Unit S1::getUnit() const { return this->unit; /* how to cast down? */ }
S1Unit
正常に動作するコンストラクターを実装することはできますBaseUnit
S1Unit::S1Unit(BaseUnit)
が、この種のダウンキャストコピーコンストラクターはどういうわけかあまり良くありません。私がチェックしたすべての回答は、ポインターを使用した例を示しています。
より良い解決策は何でしょうか?代替案はありますか?