Лучший способ сделать это, вероятно, использовать массив и обращаться к нему по индексу:
std::array<int, 16> BUTTONCOLORS = {BUTTONCOLORSX00, BUTTONCOLORSX01, ..., BUTTONCOLORSX15};
BUTTONCOLORS[i]
даст вам необходимую переменную.
Если вы ДЕЙСТВИТЕЛЬНО хотите объединить переменную, вы можете использовать макрос:
#define _BUTTONCOLORS(n) BUTTONCOLORSX##n
#define BUTTONCOLORS(n) _BUTTONCOLORS(n)
BUTTONCOLORS(1)
будет разрешено в препроцессоре как BUTTONCOLORSX1
и
BUTTONCOLORS(2)
будет разрешен в препроцессоре как BUTTONCOLORSX2
.
Вам понадобится цикл времени компиляции для разрешения макросов, чтобы вы не могли использовать цикл for. У вас есть , чтобы выполнять цикл и в макросе (поскольку все решается на этапе препроцессора).
При этом я настоятельно рекомендую использовать массив, а не макрос, потому что он безопаснее и более читабельно . Использование макросов редко бывает хорошей идеей.