2010-07-24 3 views
0

Я хотел бы реализовать что-то подобное, потому что мое приложение делится на сцены, и это становится своего рода грязный:Реализация что-то вроде станд :: 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()); 

Наконец, соглашение об именах кажется немного странным, может переименовать Scene и Layer функции current_scene и current_layer.

+0

Вау, я не могу поверить, что не знал, что структуры могут иметь функции !!!!!! вы только что спасли меня в течение многих часов! Спасибо – jmasterx

+3

@Jex: Yup, [структуры и классы точно такие же] (http://stackoverflow.com/questions/92859/what-are-the-differences-between-struct-and-class-in-c/999810 # 999810), за исключением того, что классы по умолчанию являются приватными во всем, в то время как структуры являются общедоступными. – GManNickG

+1

Я знаю даже программистов-преподавателей C++, которые считают, что struct - это прежняя структура C, и они отличаются от классов :). – Narek

0

Используйте typedef, чтобы упростить громоздкие выражения! Typedef для этого.

Смежные вопросы