2010-07-24 6 views
0

Je voudrais mettre en œuvre quelque chose comme ça parce que mon application est divisée en scènes et cela devient sorte de désordre:Mettre en œuvre quelque chose comme std :: vector.back()

glEngine.scene[glEngine.current.currentScene].layer[glEngine.scene[glEngine.current.currentScene].currentLayer].Shapes.push_back(CGlShape()); 

au lieu que je voudrais être capable de faire quelque chose comme ceci:

glEngine.Scene().layer[glEngine.Scene().currentLayer].Shapes.push_back(CGlShape()); 

Comment pourrais-je faire une telle fonction?

Merci

Répondre

3

Nous avons aucune idée de ce que vos classes sont, mais juste faire une fonction:

struct glEngine 
{ 
    // ... 

    scene_type& Scene() 
    { 
     return scene[current.currentScene]; 
    } 
}; 

Vous pouvez aussi le faire pour Scene, retourner la couche actuelle:

struct scene_type 
{ 
    // ... 

    layer_type& Layer() 
    { 
     return layer[current.currentScene]; 
    } 
}; 

Giving:

glEngine.Scene().Layer().Shapes.push_back(CGlShape()); 

Vous pouvez également envisager de scinder la ligne en seulement pour des raisons de lisibilité:

scene_type& scene = glEngine.Scene(); 
layer_type& layer = scene.Layer(); 

layer.Shapes.push_back(CGlShape()); 

Enfin, la convention de nommage semble un peu bizarre, peut-être renommer les Scene et Layer fonctions current_scene et current_layer.

+0

Wow, je ne peux pas croire que je ne savais pas que struct pourrait avoir des fonctions !!!!!! vous venez de me sauver tellement d'heures! Merci – jmasterx

+3

@Jex: Eh oui, [structs et les classes sont exactement les mêmes] (http://stackoverflow.com/questions/92859/what-are-the-differences-between-struct-and-class-in-c/999810 # 999810), à l'exception des classes par défaut à tout privé dans tout struct sont tout orteil public. – GManNickG

+1

Je sais même les enseignants de C++ PROGRAMMAT qui pensent que struct est l'ancienne struct C et ils sont différents des classes :). – Narek

0

Utilisez typedef pour simplifier les expressions lourdes! Typedef est pour ça.

Questions connexes