Комментарии 5
С одной стороны, С++ — замечательный язык, но с другой стороны… Ну ввели бы нормальные синтаксические макросы, не нужно было бы так извращаться.
а рекурсивный вызов constexpr функий тут не поможет?
еще можно делать так:
Если хочется счетчик с возможностью использования значения без приращения, можно использовать BOOST_PP_COUNTER вместо __COUNTER__
#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__
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Занимательный C++: Счетчик времени компиляции