この質問をフォローアップすると、次のような「オプション 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* クラスは編集できないことに注意してください)
もしそうなら、代わりにb2World
andb2Body
をメンバー変数として保持することをお勧めしますか?
現在、次の2つのオプションに帰着すると思います。