suite à this question, les gens ont suggéré d'aller avec "option 3" qui pourrait ressembler à ceci:Impossible d'hériter de cet objet?
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;
}
Mais il y a deux problèmes majeurs avec ce:
Body
ne peut jamais être construit, même avecWorld::CreateBody
(carb2Body
est privé)- Même si elle pouvait, alors la
b2Body
partie ne serait pas initialisé correctement (b2World::CreateBody
besoins à appeler)
Est-ce que cela signifie que je ne peut jamais hériter de b2Body
/b2World
et suivre ce même modèle de conception? (Gardez à l'esprit que je ne peux pas modifier les classes b2 *)
Si oui, je suppose que vous recommanderiez que je garde simplement b2World
et b2Body
comme variables membres à la place?
Je pense qu'il se résume à ces deux options maintenant:
Nice! Alors 'Body' n'a pas besoin d'ami' World'. http://codepad.org/CXufhOiY – mpen