![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| rudvil |
|
||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: 2 Всего: 3 |
Реально ли функцию std::size_t uid() сделать как constexpr, чтобы приведенный ниже код заработал?
http://liveworkspace.org/code/a64a5b6a70e0...226de52e9393491
Про enum'ы знаю, их можно не предлагать. Пока что смог вот так извратиться, но все время писать эти макросы жутко не удобно http://liveworkspace.org/code/957f17038912...2bcc6714c2fa5c8
какие могут быть решения данной проблемы? --------------------
xor |
||||||||
|
|||||||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| rudvil |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: 2 Всего: 3 |
Понятно, спасибо. --------------------
xor |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
есть еще встроенный макрос __COUNTER__ |
|||
|
||||
| rudvil |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 20.11.2009 Где: Latvia/Riga Репутация: 2 Всего: 3 |
Спасибо, кажется наилучшее решение. Это сообщение отредактировал(а) rudvil - 29.4.2011, 23:58 --------------------
xor |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
у решения с COUNTER недостаток в повторении значений в разных единицах трансляции...
смотря для чего нужны id, и если к значению нет требований(в том числе и динамика), кроме его уникальности, то можно использовать адресс переменной... хотя подобный подход накладывает тоже много ограничений.. и обычно применяется для идентификатора типа.. |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
если, к примеру, не нужны последовательные значения, то __COUNTER__ можно комбинировать с __LINE__ |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а разве это гарантирует уникальность ? Добавлено через 1 минуту и 52 секунды к тому же может привести к проблеме, когда из за добавления одной незначащий строчки, появиться неожидано непредвиденное поведение |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
нет, естественно Добавлено @ 16:24
это да. я когда-то пытался закодить что-то вроде этого.. мне нужен был компайл-тайм typeid. но только чтоб он не имена типов возвращал, а целые в качестве ID`ов. ну и забросил. вроде как на тот момент это мне казалось невозможным... была идея пропатчить компилятор Это сообщение отредактировал(а) boostcoder - 30.4.2011, 16:25 |
|||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
Прошу прощения, что спрашиваю в чужой теме, но вопрос IMHO близкий...
А можно как-нибудь проверить в compile-time уникальность констант, но не через switch. Есть такой код
Если ТС будет против - создам отдельную тему. Спасибо -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
borisbn, вроде как цели схожи: http://forum.vingrad.ru/forum/topic-319669.html
Добавлено через 1 минуту и 45 секунд а вообще - нет, такое невозможно. решение влоб - добавлять твои типы в некий mpl-контейнер с проверкой на предмет существования. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 22 Всего: 135 |
_вдвойне_ жаль :(
не очень понял (читай - вообще не понял), т.к. с mpl-контейнерами не работал. Можешь показать пример ? И ещё вопрос, __COUNTER__ исключительно gcc-шный, или в MSVC он тоже есть ? mes, если не такой typedef, а какая-либо другая конструкция может дать compile-time ошибку при совпадении констант ? Сейчас делаю совершенно дурацким способом - перед компиляцией сам парсю свой исохдник и проверяю константы на уникальность, но IMHO это не выход... -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 49 Всего: 110 |
||||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
в любом случае нужен список.. получить его можно либо при определении нового типа _наследоваться_ от предыдущего и сохранять полученный список типов внутри определяемого типа, либо отдельно от определений составить список всех нужных типов.. Ну а имея список типов легко проверить на уникальность, вхождение в нужный диапазон и многое другое.. Это сообщение отредактировал(а) mes - 2.5.2011, 16:20 |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |