Как стать автором
Обновить

Комментарии 5

С одной стороны, С++ — замечательный язык, но с другой стороны… Ну ввели бы нормальные синтаксические макросы, не нужно было бы так извращаться.
С другой стороны, нельзя объять необъятное и засунуть все в один язык. Больше языков, хороших и разных!
а рекурсивный вызов constexpr функий тут не поможет?
Мне не довелось еще пользоваться constexpr функциями, но насколько я понимаю, побочные эфекты не допускаются. А нам здесь нужно изменяемое глобальное состояние — текущее значение счетчика.
еще можно делать так:
#include <iostream>
 
#define DEFINE_COUNTER(NAME) namespace{ enum{ NAME = __COUNTER__ }; }
#define AUTOINCREMENTED_VALUE_OF(NAME) (__COUNTER__ - NAME)
 
DEFINE_COUNTER(MyCounter);
 
int main()
{
    auto x = AUTOINCREMENTED_VALUE_OF(MyCounter); // x is 1
    auto y = AUTOINCREMENTED_VALUE_OF(MyCounter); // y is 2
 
    std::cout << "x = " << x << ", y = " << y << std::endl;
}

Если хочется счетчик с возможностью использования значения без приращения, можно использовать BOOST_PP_COUNTER вместо __COUNTER__
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории