2010-07-24 39 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就是为了这个。