私がこの設定をしているとしましょう:
struct XView;
struct X
{
...
XView view;
};
タイプXView
はこの1つのフィールドにのみ使用されます。内部にもあるため、外部からインスタンス化すること、つまり他の目的に使用することは禁止されています。
したがって、型のオブジェクトがフィールドであると仮定すると、C ++標準で定義された動作の範囲内に完全にとどまり、型のパンニングなしで、のアドレスからのアドレスを見つけることができますか?つまり、次のようなことを行うことは可能ですか?XView
X::view
X
XView
void XView::some_function ()
{
X& this_x = some_computations_involving (this);
}
もちろんポインタを格納できるので、これは簡単になりますがx = *this->parent_x
、可能であればポインタなしで実行したいと思います。
編集:型のパンニングを伴わない答えが必要であることに注意してください。そうでない場合は、「ポインタを格納するだけ」のソリューションを使用したいと思います。