2010-07-24 37 views
0

我想實現這樣的事情,因爲我的應用程序分爲場景和這獲取有點凌亂:實施類似的std :: vector.back()

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

,而不是我想成爲能夠做這樣的事情:

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

我怎麼能做出這樣的功能?

感謝

回答

3

我們不知道你的類,但只是做一個函數:

struct glEngine 
{ 
    // ... 

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

你也可以做到這一點爲Scene,返回當前層:

struct scene_type 
{ 
    // ... 

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

給予:

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

您也可以考慮拆分排隊只是爲了可讀性的原因:

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

layer.Shapes.push_back(CGlShape()); 

最後,命名慣例,似乎有點不可思議,在SceneLayer功能可能重命名爲current_scenecurrent_layer

+0

哇,我不敢相信我不知道結構可以有功能!!!!!!你只是救了我很多小時!謝謝 – jmasterx 2010-07-24 19:57:19

+3

@Jex:Yup,[結構和類完全一樣](http://stackoverflow.com/questions/92859/what-are-the-differences-between-struct-and-class-in-c/999810 #999810),除非類在默認情況下默認爲私有,而結構則公開指向一切。 – GManNickG 2010-07-24 20:04:09

+1

我甚至知道C++的編程教師認爲結構是前C結構,他們不同於類:)。 – Narek 2010-07-26 19:26:20

0

使用typedef來簡化繁瑣的表情! Typedef就是爲了這個。