Реализация чего-то вроде std :: vector.back () - PullRequest
0 голосов
/ 24 июля 2010

Я хотел бы реализовать что-то вроде этого, потому что мое приложение разделено на сцены, и это становится немного грязным:

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());

Как сделать такую ​​функцию?

Спасибо

Ответы [ 2 ]

3 голосов
/ 24 июля 2010

Мы не знаем, какие у вас классы, но просто делаем функцию:

struct glEngine
{
    // ...

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

Вы также можете сделать это для Scene, возвращая текущий слой:

struct scene_type
{
    // ...

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

Giving:

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 голосов
/ 24 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...