|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
16.06.2012, 23:40 | #1 |
Новичок
Джуниор
Регистрация: 16.06.2012
Сообщений: 6
|
Уникальный идентификатор типа
Добое время суток!
Нужно получить уникальный идентификатор класса без использования RTTI. Механизм должен быть thread safe, глобальные (и static в том числе) переменные запрещены. Пока родил такой код Код:
|
17.06.2012, 01:53 | #2 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
хм... с какой стати он это сделает?
|
17.06.2012, 02:46 | #3 |
Новичок
Джуниор
Регистрация: 16.06.2012
Сообщений: 6
|
Ну хз, одинаковые строки ж умеет удалять. но тут шаблонные функции, да еще с разными именами. по идее не должен трогать.
Проверил на разных компилерах с разными опциями оптимизации (в том числе GCC LTO) - везде работало корректно. |
17.06.2012, 04:02 | #4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Ну просто разные инстансы шаблона - это принципиально разные типы жеж.
А значит, каждый такой инстанс должен обладать собственной независимой копией getClassId() Которая, к тому же используется (берётся адрес). Не должен он там ничего такого соптимизировать) Можно вопрос: для чего поделка предназначена? |
17.06.2012, 06:05 | #5 |
Новичок
Джуниор
Регистрация: 16.06.2012
Сообщений: 6
|
Та да, везде работает гуд, успел проверить на куче разного кода и интересующих компилерах...
Нужно для идентификации типов сообщений, чтобы руками не городить проверку типа сообщения и явное преобразование типов. И в других местах, где нужна простая и легковесная рантайм идентификация типов. Простой пример использования Код:
|
17.06.2012, 14:27 | #6 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Вообще идея отличная! Я в восторге)
Только в basewrapper виртуальный диструктор просится. Последний раз редактировалось _Bers; 17.06.2012 в 14:31. |
17.06.2012, 15:38 | #7 |
Новичок
Джуниор
Регистрация: 16.06.2012
Сообщений: 6
|
Да в embedded приходится придумывать всякое Виртуальный деструктор там есть, просто код еще драфт выложил, там и имена другие теперь...
Еще вариант один родил, без виртуальных функций с таким же поведением, немного экономичнее в плане процессорного времени Код:
Код:
Код:
И в отличии от dynamic_cast данные реализации по сути не поддерживают наследования: RtClassId<наследник>::getObjectptr( наследник) всегда возвращает 0, если налседник задекларирован как Код:
Код:
Последний раз редактировалось brag; 17.06.2012 в 15:52. |
17.06.2012, 15:54 | #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. |
|
17.06.2012, 16:29 | #9 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
Вопрос: можно ли добиться след. эффекта:
Код:
|
17.06.2012, 17:43 | #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 |