Je me demandais s'il était possible de créer un membre de données de classe partagé uniquement par un groupe d'objets de cette même classe.
J'ai une classe appelée Scène et un autre appelé Objet du jeu , La scène crée des GameObjects, et chaque GameObject créé doit avoir une référence à la scène qui l'a créé.
Je pourrais y parvenir en déclarant simplement :
class GameObject
{
public:
Scene* scene;
}
Et mis à chaque fois qu'une scène crée un objet de jeu.
void Scene::add_game_object(){
GameObject* gameobject = new GameObject();
gameobject->scene = this;
}
Mais, cela prendrait beaucoup de mémoire.
J'ai réfléchi à une solution (actuellement, je ne compile pas, mais nous pourrions peut-être en tirer quelque chose).
class GameObject
{
public:
template< Scene* S >
Scene* get_scene();
}
//
template< Scene* S >
Scene* GameObject::get_scene(){
static Scene* sc = nullptr;
if( sc == nullptr ){
sc = S;
}
return sc;
}
void Scene::add_game_object(){
GameObject* gameobject = new GameObject();
// link scene and gameobject.
gameobject->get_scene(this);
}
L'utiliser :
gameobject->get_scene<nullptr>();
Merci. Cordialement.