Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Простая реализация RTTI (run time type information) (комментарии) (2 стр)

Простая реализация RTTI (run time type information) (комментарии) (2 стр)

Страницы: 1 2 3 4 Следующая »
Sergey MakeevПостоялецwww30 дек. 200913:00#15
opengl_extensions
> в дебаг сборке на 1000000 итераций отношение dynamic_cast / костыль с
> блэкджеком - 0.01 [ 12.82M / 0.14M ]

в дебаг сборке будет медленнее, это естественно, по идее на скорость dynamic_cast дебаг не особо влияет.

opengl_extensionsПостоялецwww30 дек. 200913:05#16
Visual Studio 2005 version 8.0.50727.762 собрано в Release с /O2

WinXP SP3 ,  Intel(R) Pentium(R) D CPU 2.80 GHz , 1 GB RAM DDR2 Dual 333,4 Mhz (PC2-5300)

отношение  ~ 0.73

в дебаге то ясно ) да и такое количество привидений типов = гадкая проектировка

да еще у тебя foo 6 раз - у меня 8

ExecutorУдалёнwww30 дек. 200913:09#17
А в чём профит по сравнению обычного стандартного RTTI? Зачем свой изобретать?

ud1
Стать участником ИМХО настолько просто, что только ленивые не участники... :)

Sergey MakeevПостоялецwww30 дек. 200921:36#18
Executor
> А в чём профит по сравнению обычного стандартного RTTI? Зачем свой изобретать?

Профит в следующем:

1.Умеет больше чем стандартный - можно автоматическую сериализацию привинтить поверх или редактор свойств класса визуальный или автосинхронизацию состояния классов по сети...
2.Т.к. умеет больше, можно по текстовому имени класса создавать экземпляры объектов
3.Переносимый, работает на любом компиляторе/платформе

Sergey MakeevПостоялецwww30 дек. 200921:42#19
opengl_extensions
> Visual Studio 2005 version 8.0.50727.762 собрано в Release с /O2
>
> WinXP SP3 , Intel(R) Pentium(R) D CPU 2.80 GHz , 1 GB RAM DDR2 Dual 333,4 Mhz
> (PC2-5300)
>
> отношение ~ 0.73

Потестил в конторе сегодня. На AMD с длинными именами классов, прирост стабильно 1.5-1.7 . На интелах, наоборот начинает медленнее работать.
После праздников посмотрю почему. По идее должно все быть очень быстро (compile time хеши строк, минимум проверок и т.д.)
Быстрее только вынимать rtti информацию из pdb после компиляции, как к примеру вот тут делают (Часть 1, Часть 2, Часть 3)

SanПостоялецwww31 дек. 20092:54#20
Sergey Makeev
> static RS_INLINE void StringHashCompiletime::Build(unsigned int & hash, int strLen, const char * input)
беда в том, что это не чистый компайл-тайм. при определенных условиях компилер может выдать честный рантаймовый код.
но вроде для хешей задача решаема, надо будет попробовать.
ЗЫ для чистого компайл-тайма нужны компайл-таймовые строки.
PushkoffУдалёнwww31 дек. 20093:59#21
сравните и мою реализацию... http://www.gamedev.ru/code/tip/?id=4696
my.nameПостоялецwww31 дек. 20097:24#22
2Pushkoff
оч похоже на класическое. так же у себя (MyGUI) реализовал (тайпдифами) макрос, где не нужно указывать отца. т.е. в твоем случае будет выглядеть вот так.

class Object
{
public:
  DECLARE_ROOT_OBJECT(Object)
 
};

class ChildObject : public Object
{
public:
  DECLARE_OBJECT(ChildObject)
};

class SecondChildObject : public ChildObject
{
public:
  DECLARE_OBJECT(SecondChildObject)
};

Sergey MakeevПостоялецwww31 дек. 200912:43#23
San
> беда в том, что это не чистый компайл-тайм. при определенных условиях компилер
> может выдать честный рантаймовый код.

Проверял на VS2005 и GCC 4.4.2 оптимизатор там умный, сворачивает все до констант. А так, да - это не чистый compile time, а весь рассчет на умный оптимизатор.
Интереснее почему на AMD и Intel разница - это в новом году уже проверю :) заодно и тесты для X360 а попозже и для PS3 сделаю.

PushkoffУдалёнwww31 дек. 200913:06#24
my.name
ну это если компилятор поддерживает __super (MSVC) или что-то подобное...
my.nameПостоялецwww31 дек. 200914:04#25
Pushkoff
> ну это если компилятор поддерживает __super (MSVC) или что-то подобное...
нет =) все гораздо проще и переносимо

в книге эволюция C++ был такой пример, кто то предложил ввести в стандарт ключевое слово base (как в некоторых языках) которое является синонимом типа базового класа, если он один.
и чуть было не ввели, но ктото вовремя догадался что это мона сделать одной строкой:
typedef BaseClass base;

соответсвено реализация простая
в твоем макросе ROOT ты делаешь еще дефан.
typedef cls RTTIBase;

а в макросе дочернего класа пишешь такое:
typedef RTTIBase Base;
typedef cls RTTIBase;

вуаля, теперь мона в макросе не указывать твой super и внутри дочерних класов доступен тип Base
мне это помогло пару раз, когда менял иерархию, оказалось внутри класа вызывал бызовые методы старого отца. после того как везде поменял на Base::имя_метода то таких проблем больше небыло

PushkoffУдалёнwww31 дек. 200914:06#26
my.name
а вот это стоило оформить как подсказку...
my.nameПостоялецwww31 дек. 200914:11#27
Pushkoff
> а вот это стоило оформить как подсказку...
оформи =)
PushkoffУдалёнwww31 дек. 200915:35#28
my.name
ну это как бе твой велосипед... у меня своих велосипедов хватает...
my.nameПостоялецwww31 дек. 200920:15#29
ну ок, давай тогда просто сделаем, если ты заюзаешь, то от своего имени и оформишь подсказку. ты же не ленишься выкладывать свой вариант RTTI . я думаю это честно =)
Страницы: 1 2 3 4 Следующая »

/ Форум / Программирование игр / Общее

Тема в архиве.

2001—2018 © GameDev.ru — Разработка игр