Yoc*_*mer 1 c++ macros concatenation
我想创建一个递归宏,将创建"下一个"类.
例:
#define PRINTME(indexNum) class m_##(indexNum+1) { }
Run Code Online (Sandbox Code Playgroud)
它indexNum + 1被评估为int,并且不会连接到类名.
在连接之前,如何让编译器对其进行评估?
如果要在每次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__有效.)
演示.