![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 16.06.2012
Сообщений: 6
|
![]()
Добое время суток!
Нужно получить уникальный идентификатор класса без использования RTTI. Механизм должен быть thread safe, глобальные (и static в том числе) переменные запрещены. Пока родил такой код Код:
|
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
хм... с какой стати он это сделает?
|
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 16.06.2012
Сообщений: 6
|
![]()
Ну хз, одинаковые строки ж умеет удалять. но тут шаблонные функции, да еще с разными именами. по идее не должен трогать.
Проверил на разных компилерах с разными опциями оптимизации (в том числе GCC LTO) - везде работало корректно. |
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Ну просто разные инстансы шаблона - это принципиально разные типы жеж.
А значит, каждый такой инстанс должен обладать собственной независимой копией getClassId() Которая, к тому же используется (берётся адрес). Не должен он там ничего такого соптимизировать) Можно вопрос: для чего поделка предназначена? |
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 16.06.2012
Сообщений: 6
|
![]()
Та да, везде работает гуд, успел проверить на куче разного кода и интересующих компилерах...
Нужно для идентификации типов сообщений, чтобы руками не городить проверку типа сообщения и явное преобразование типов. И в других местах, где нужна простая и легковесная рантайм идентификация типов. Простой пример использования Код:
|
![]() |
![]() |
![]() |
#6 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Вообще идея отличная! Я в восторге)
Только в basewrapper виртуальный диструктор просится. Последний раз редактировалось _Bers; 17.06.2012 в 14:31. |
![]() |
![]() |
![]() |
#7 |
Новичок
Джуниор
Регистрация: 16.06.2012
Сообщений: 6
|
![]()
Да в embedded приходится придумывать всякое
![]() Еще вариант один родил, без виртуальных функций с таким же поведением, немного экономичнее в плане процессорного времени Код:
Код:
![]() Код:
![]() И в отличии от dynamic_cast данные реализации по сути не поддерживают наследования: RtClassId<наследник>::getObjectptr( наследник) всегда возвращает 0, если налседник задекларирован как Код:
Код:
Последний раз редактировалось brag; 17.06.2012 в 15:52. |
![]() |
![]() |
![]() |
#8 | |
C++ hater
Старожил
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]()
2brag
2 замечания Цитата:
2. я бы переписал так Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 17.06.2012 в 15:57. |
|
![]() |
![]() |
![]() |
#9 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
![]()
Вопрос: можно ли добиться след. эффекта:
Код:
|
![]() |
![]() |
![]() |
#10 | ||
Новичок
Джуниор
Регистрация: 16.06.2012
Сообщений: 6
|
![]() Цитата:
![]() Цитата:
![]() _Bers, хм, надо подумать... |
||
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Уникальный GUI интерфейс | |{ot | Общие вопросы C/C++ | 6 | 03.07.2011 18:25 |
Уникальный идентификатор (Hardware ID) | Marx88 | Общие вопросы Delphi | 5 | 05.07.2010 15:11 |
Как делают уникальный идентификатор строки в БД? | sergey113 | Помощь студентам | 3 | 05.08.2008 17:48 |
Уникальный идентификатор | romets | Win Api | 9 | 03.02.2008 02:30 |