![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| SABROG |
|
||||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Объявляю перечисление флагов таким образом
что эквивалентно такому коду:
Хочу заставить препроцессор генерить циферки автоматом за меня, предположим через шаблоны:
В шаблоне нужно каким-то образом сделать общий счетчик, который бы увеличивался на 1 при каждом вызове "Flag<>::value", при этом не хочется заводить переменной, которая бы занимала память. Каким образом это можно сделать? Это сообщение отредактировал(а) SABROG - 14.4.2010, 18:54 |
||||||
|
|||||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
SABROG
А так?
но по моему не наглядно это как-то. |
|||
|
||||
| 17dufa |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 324 Регистрация: 2.3.2006 Репутация: 3 Всего: 5 |
SABROG, немного не эквивалентно
присоединяюсь к вопросу - мона такое? *есть у мя подозрение, что низя. azesmcar, я так понимаю топикастер не хочет в ручную считать 1,2,3..., хочет чтоб оно само проинкрементировалось Это сообщение отредактировал(а) 17dufa - 14.4.2010, 16:02 |
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
Нельзя так сделать, Flag<>::value может вызываться в цикле - и где храниться счетчику, как не в памяти? Не будет же компилятор пытаться прокрутить все циклы заранее :).
Считайте внутренней переменной-счетчиком. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
||||
|
||||
| SABROG |
|
||||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Угу. Да, мой косяк.
Это сообщение отредактировал(а) SABROG - 14.4.2010, 16:55 |
||||
|
|||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 81 Всего: 211 |
чтобы не писать циферки вручную могу предложить такой вариант
Добавлено через 1 минуту и 19 секунд и где она должна хранится? |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
||||
|
||||
| qweqwe |
|
||||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
мне кажется, это можно сделать с помощью препроцессора
я не уверен, так как давненько не писал на плюсах
в результате должно получиться что-то вроде этого:
Это сообщение отредактировал(а) qweqwe - 14.4.2010, 16:24 |
||||||
|
|||||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 8 Всего: 39 |
>Пусть в памяти, но препроцессора, а не моей программы.
И что прикажите делать компилятору? Или он должен поверить на слово, что никакой динамики от вас не предвидится? Препроцессор же тут вообще ни при чем, не он шаблонами вертит. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| qweqwe |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 31.1.2007 Репутация: нет Всего: 0 |
эээ, нет
такое с плюсовым препроцессором не пройдет |
|||
|
||||
| SABROG |
|
|||
![]() Hacker ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2481 Регистрация: 18.9.2006 Репутация: 4 Всего: 91 |
Начать генерить развернутый цикл и выдать ошибку компиляции при overflow. |
|||
|
||||
| mes |
|
|||
|
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
||||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Метапрограмирование в плюсах строится на константах, условных выражениях (реализуется через частичную специализацию шаблонов) и рекурсии (рекурсивная подстановка шаблонов). Для переменных в метапрограмировании просто нет соотвествующей синтаксической конструкции. То, что требует ТС подразумевает использование переменной (для хранения номера генерируемого enum'а), т.е. это невозможно в принципе
Ряд 1/2/4/... можно сгенерить при помощи (мета)рекурсии, но как его собрать потом в один enum ума не приложу |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |