我想编写一个简单的宏来扩展一些标识符,这样当我有类似的代码来测试许多不同的类时,它会一次又一次地输入所有内容。
我想要这样的东西:
#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
我试图寻找这个,但在这个具体案例中,我在其他地方找不到多少帮助。
答案 0 :(得分:1)
变化:
#define TST(x) x## x##_1(2); \
x## x##_2; \
...
到
#define TST(x) x x##_1(2); \
x x##_2; \
...
##
是令牌粘贴操作符:它"吸收"周围的空格并将相邻的标记合并为一个。
您在那里的额外内容将Pentagonal
和Pentagonal_1
粘贴在一起。