宏用于创建多个类似的标识符以进行测试

时间:2014-11-14 01:38:29

标签: c++ macros identifier

我想编写一个简单的宏来扩展一些标识符,这样当我有类似的代码来测试许多不同的类时,它会一次又一次地输入所有内容。

我想要这样的东西:

#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 个答案:

答案 0 :(得分:1)

变化:

#define TST(x)  x## x##_1(2);                   \
                x## x##_2;                      \

...

#define TST(x)  x x##_1(2);                   \
                x x##_2;                      \

...

##是令牌粘贴操作符:它"吸收"周围的空格并将相邻的标记合并为一个。

您在那里的额外内容将PentagonalPentagonal_1粘贴在一起。