多级c / c ++宏 - 评估结果后的空白?

时间:2013-08-30 02:04:38

标签: c++ c macros

我所要做的就是使用宏来生成类名,它需要一些concat,就是这样。除了它悲惨地失败。这真的在磨练我的齿轮。

我在某个地方定义了一个宏...

#define CLASSNAME myclassname
...

我正在尝试使用类型生成类名...

#define GETNAME(x) x
#define UNIQUENAME(T) GETNAME(CLASSNAME) ## _ ## T

UNIQUENAME(int)   //I want it to make: myclassname_int
                  // instead it makes: myclassname _int
// SUBTLE, but screws everything up! can't have that space in the middle.

我检查了另一个配置......

#define UNIQUENAME(T) GETNAME(CLASSNAME)M ## M_ ## T
//which returns: myclassname MM_int

所以空间绝对来自GETNAME结果。唯一的问题是,我不知道如何摆脱它。我现在已经试过太久了。

一切都会有所帮助。 谢谢!

1 个答案:

答案 0 :(得分:1)

#define ClassName       myclassname

#define Paste(a, b)     a ## _ ## b
#define Helper(a, b)    Paste(a, b)
#define UniqueName(T)   Helper(ClassName, T)

UniqueName(int)

Here解释了宏扩展以及为什么我们需要像这样的辅助宏。