ここに「GetParent()」関数を実装したいと思います-
class ChildClass;
class ParentClass
{
public:
....
ChildClass childObj;
....
};
class ChildClass
{
friend class ParentClass;
private:
ChildClass();
public:
ParentClass* GetParent();
};
親オブジェクトへのポインターを格納するプライベート メンバー変数を作成しようとしました。ただし、この方法には追加のメモリが必要です。
class ChildClass
{
friend class ParentClass;
private:
ChildClass();
ParentClass* m_parent;
public:
ParentClass* GetParent()
{
return m_parent;
}
};
そこで、offsetof() マクロを使用しました (offsetof() を呼び出すパフォーマンス コストは無視できます) が、このアプローチが安全かどうかはわかりません。あらゆる状況で機能しますか?より良いアイデアはありますか?
class ChildClass
{
public:
ParentClass* GetParent()
{
return reinterpret_cast<ParentClass*>(
reinterpret_cast<int8_t*>(this) - offsetof(ParentClass, childObj)
);
}
};