Макрос для создания нескольких одинаковых идентификаторов для тестирования
Я хотел написать простой макрос для расширения некоторых идентификаторов, чтобы он избавлял меня от необходимости вводить все снова и снова, когда у меня есть похожий код для тестирования для множества различных классов.
Я хотел что-то вроде этого:
#define TST(x) x## x##_1(2); \
x## x##_2; \
\
x##_1.print(cout); \
x##_2.print(cout); \
x##_2.elem(3); \
x##_2.elem(4); \
x##_2.print(cout)
Быть переведенным на
Pentagonal Pentagonal_1(2);
Pentagonal Pentagonal_2;
Pentagonal_1.print(cout);
Pentagonal_2.print(cout);
Pentagonal_2.elem(3);
Pentagonal_2.elem(4);
Pentagonal_2.print(cout);
всякий раз, когда я звоню
TST(Pentagonal);
до сих пор это переводится склеены как
PentagonalPentagonal_1
Я пытался найти это, но в этом конкретном случае я не мог найти большую помощь в другом месте.
1 ответ
Решение
Изменить:
#define TST(x) x## x##_1(2); \
x## x##_2; \
...
в
#define TST(x) x x##_1(2); \
x x##_2; \
...
##
является оператором вставки токенов: он "поглощает" окружающие пробелы и объединяет соседние токены в один.
Дополнения, которые у вас были там, вставляли Pentagonal
а также Pentagonal_1
все вместе.