![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
REZiaMIX |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: нет Всего: 4 |
Есть класс TAnimation , с функцией Render... Функция использует глобальные переменные(от которых в посл. надо избавиться) .
+ класс TAnimations (метод Render тоже присутствует), представляющий собой массив анимаций , и функции для массовой их обработки - в чистом виде не используется , только наследуется. Итого , имеем множество классов например: TBullets,THumans - все наследуют TAnimations. Надо сделать класс-обертку для всей анимации, но проблема в том , что классов может быть неизвестное кол-во , и каждый раз дописывать код в обертку не красиво и не гибко. Каким образом реализовать такой класс(в полиморфизме и тд не очень разбираюсь) , с учетом того , что у всех исходных есть функция Render? Пояснение:
Есть вариант , хранить в векторе указатель на функции рендера , и вызывать их в цикле, но все исходные классы должны получать те глобальные переменные(можно передать как аргумент). Но что то мне подсказывает , что есть более правильный выход! В идеале бы хотелось так(понятно что не будет работать , но для примера):
Заранее сенкс за ответы! Это сообщение отредактировал(а) REZiaMIX - 27.10.2008, 23:04 -------------------- ![]() |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
Это сообщение отредактировал(а) mes - 27.10.2008, 23:17 |
|||
|
||||
REZiaMIX |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: нет Всего: 4 |
Этот кусок кода уже реализован , вопрос стоит в другом;
Соответственно если я напишу класс TFlowers, то в класс TAllAnimation надо будет дописать TFlowers в двух местах , нужно сделать обобщенный рендер , не в зависимости от класса(при условии наличия у них фции render)
Не будет ли ошибкой добавление в вектор указателя на TBullets , приведенного к указ. на IAnimation( (IAnimation*)&TBullets )??? //ПС , точнее его дальнейшее использование ! Это сообщение отредактировал(а) REZiaMIX - 27.10.2008, 23:22 -------------------- ![]() |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот подправил пример под вашу задачу:
однако советую разобраться с полиморфизмом, чтоб найти к Вашей задаче наиболее подходящее решение ![]() Это сообщение отредактировал(а) mes - 27.10.2008, 23:26 |
|||
|
||||
Torsten |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 10.6.2008 Где: Pskov Репутация: 3 Всего: 7 |
Предлагаю тебе сделать условие, не при наличии фции, а при наследовании определенного класса. А сделать это очень просто. Создаешь класс контейнер - сигнлтон, в котором хранится список всех обьектов которые нужно отредерить - т.е. указатели на базовые класс. Фишка в том что в конструкторе этого базового класса (у которого есть виртуальный метод Render) тебе нужно вызвать метод сигнлотона и добавить в этот список этот обьект. В коде это примерно так должно выглядеть :
Ну и класса RenderContainer соотвественно метод, который вызовет через цикл у всех обьектов Render метод Rendor. Все что нужно будет сделать - унаследовать твой обьект от класс RenderObject, определить в нем RenderImpl() и создать этот обьект, он сам добавится в конейнер, причем сделать это можно в любой части программы. Естественно в синглтон можно и твои глоб. переменные запихнуть, как раз ты сможешь тогда эти переменные передавать методу Render если это будет нужно. Это сообщение отредактировал(а) Torsten - 28.10.2008, 15:15 --------------------
We have no begining, we have no end. We are infinite. |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а зачем в данном случае синглетон? а вобще это плохая тенденция применять патерны где они не нужны, только потому что у них название звучное.. |
|||
|
||||
REZiaMIX |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 346 Регистрация: 3.11.2007 Репутация: нет Всего: 4 |
Всем спасибо , буду разбираться!
-------------------- ![]() |
|||
|
||||
Torsten |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 10.6.2008 Где: Pskov Репутация: 3 Всего: 7 |
потому что удобно. Зачем - чтобы иметь возможность доступа к обьекту из любой точки. И насколько я понял обьект этот 1 и смысл создовать таких обьектов более 1 - нету. --------------------
We have no begining, we have no end. We are infinite. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |