サブオブジェクトを割り当てる適切な方法は何ですか?たとえば:サブオブジェクトの割り当て
struct A {
int x = 2;
int y = 3;
};
struct B: A {
int z = 5;
};
int main() {
std::unique_ptr<B> bp{new B{}};
A a;
a.x = 12;
a.y = 13;
*(static_cast<A*>(bp.get())) = a; // happens to work, but is it the right way?
std::cout << bp->x << " " << bp->y << std::endl;
return 0;
}
これは動作します(または動作するようになりますか?)が、厄介であるとB
のレイアウトについての仮定に依存しています。では、正しい方法は何ですか?
なぜそれほど珍しいのですか?また、明示的キャストはこの場合に動作することが保証されていますか? – AlwaysLearning
@AlwaysLearning:理由は言うまでもないが、私の経験では珍しい。一般に、継承を使用している場合、オブジェクト状態の抽象化を何らかの形で実行しようとしています。 –
@AlwaysLearning:x、y、zのメンバーを使うと、デカルト座標をモデル化しようとしていると思います。継承を使用することによって、3D座標が正しいモデルではない2D座標であると効果的に言います。多分それは意図ではありませんでした。 –