Russian Qt Forum
Апрель 27, 2017, 02:34 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Объект умеет сам себя рисовать?  (Прочитано 736 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 9512


Просмотр профиля
« Ответ #15 : Апрель 21, 2017, 09:26 »

Преимущества плюсов, конечно, напрашиваются)
Но все-таки иногда, в очень редких случаях, но все же, полиморфных вызовов хочется избежать (если ну очень критична производительность) - все-таки тупой свитч и статик-каст отработают +несколько+ быстрее... Возможно, тут именно одно из подобных исключений Улыбающийся
Учитывая грядущую отрисовку тонн полигонов, вопрос о какой-то "заточке по скорости" здесь не стоит. А достоинства свитча - не столько его быстрота как компактность (не путать с "краткость"). По крайней мере все руление собрано в одном месте, нередко удается запастись общим кодом для неск веток. А расхристанные виртуалы как минимум трудно обозреть.   

Я имел в виду - проверять поле типа и в зависимости от него брать нужные параметры.
Так это по существу сейчас и сделано, конечно можно вместо dynamic_cast оформить ID + switch, но это не принципиально   

Так я насколько понимаю проблему - Igors как раз хочет избежать множества виртуальных Draw.
Просто образовался кусок кода с серией приведений (пусть относительно небольшой), вот думаю как этого можно избежать. В принципе я не против виртуальных Draw но пока из них ничего хорошего не выходит.
Записан
__Heaven__
Neo
******
Offline Offline

Сообщений: 1775



Просмотр профиля
« Ответ #16 : Апрель 21, 2017, 09:28 »

Есть ещё вариант использовать rtti и map
Код
C++ (Qt)
static const std::map<std::type_info, std::function> funMap = {
   {typeid(CObjectParam1), DrawObjectsParam1},
   ....
};
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 9512


Просмотр профиля
« Ответ #17 : Апрель 22, 2017, 09:55 »

Есть ещё вариант использовать rtti и map
Код
C++ (Qt)
static const std::map<std::type_info, std::function> funMap = {
   {typeid(CObjectParam1), DrawObjectsParam1},
   ....
};
Так надо прилагать усилия чтобы связать каждый DrawObjectsParam_xxx с окном. Плюс заряжать и хранить мапу(ы) - возможно свою для каждого окна. Не вижу где "выйгрыш"
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.091 секунд. Запросов: 23.