Генерация уникальных значений для глобальных переменных constexpr - PullRequest
1 голос
/ 26 июня 2019

Я использую глобальный constexpr в качестве ключей для доступа к карте, и мне было интересно, есть ли способ автоматически инициализировать их следующим доступным целым числом.

constexpr size_t ON_EVENT_X = 0;
constexpr size_t ON_EVENT_Y = 1;
constexpr size_t ON_EVENT_Z = 2;

Возможно ли, если ON_EVENT_X, ON_EVENT_Y и ON_EVENT_Z автоматически инициализировать их с правильными значениями? Я думаю, что это можно сделать с помощью макроса препроцессора, но я недостаточно использовал его, чтобы точно знать, как это сделать.

Есть предложения?

1 Ответ

4 голосов
/ 26 июня 2019

Для этого подходит перечисление:

enum : std::size_t {
    ON_EVENT_X,
    ON_EVENT_Y,
    ON_EVENT_Z,
};

Для более сложных случаев, таких как отдельные определения, или там, где перечисление enum не подходит, существуют решения на основе макросов, такие как BOOST_PP_COUNTER в сочетании с BOOST_PP_UPDATE_COUNTER.

...