宏增加值然后连接

Yoc*_*mer 1 c++ macros concatenation

我想创建一个递归宏,将创建"下一个"类.

例:

#define PRINTME(indexNum) class m_##(indexNum+1) { }
Run Code Online (Sandbox Code Playgroud)

indexNum + 1被评估为int,并且不会连接到类名.

在连接之前,如何让编译器对其进行评估?

iam*_*ind 5

如果要在每次PRINTME调用时生成唯一的类名,则以下是一种方法:

#define CONCATE1(X,Y) X##Y
#define CONCATE(X,Y)  CONCATE1(X,Y)

#define PRINTME class CONCATE(m_,__COUNTER__) {}
Run Code Online (Sandbox Code Playgroud)

__COUNTER__是gcc的扩展,我不确定它是否存在于其他编译器中.保证编译器每次调用此宏时都会加1.
(在这种情况下,你不能使用__LINE____FILE__有效.)

演示.