この質問をフォローアップすると、次のような「オプション 3」を使用するよう提案されました。
class b2Body {
private:
b2Body() {}
friend class b2World;
};
class Body : public b2Body {
private:
Body() {}
friend class World;
};
class b2World {
public:
b2Body *CreateBody() {
return new b2Body;
}
};
class World : public b2World {
public:
Body *CreateBody() {
return new Body;
}
};
int main() {
World w;
Body *b = w.CreateBody();
return 0;
}
しかし、これには 2 つの大きな問題があります。
Body(プライベートでWorld::CreateBodyあるため)であっても、構築することはできませんb2Body- できたとしても、
b2Bodyパーツは正しく初期化されません (呼び出すb2World::CreateBody必要があります)。
b2Bodyこれは、 /から継承してb2World、この同じ設計パターンに従うことはできないということですか? (b2* クラスは編集できないことに注意してください)
もしそうなら、代わりにb2Worldandb2Bodyをメンバー変数として保持することをお勧めしますか?
現在、次の2つのオプションに帰着すると思います。