【发布时间】:2012-02-26 16:48:27
【问题描述】:
我正在尝试使用宏来模仿 C++ 中的模板行为。例如,如果我想要一个 int* 列表,那么我会这样做:
typedef int* IntPtr;
List_DEFINE(IntPtr)
请注意,List_DEFINE(IntPtr) 没有分号,因为它是一个宏。我已经编写了我的列表“类”(实际上只是几个带有方法指针的结构),并在将其设为宏之前对其进行了测试。我现在正试图“宏化”我的代码,但我遇到了问题。我已经这样定义了我的宏:
#define List_DEFINE(t) \
struct List_##t_Node { \
...
在上面的示例中,我认为##t 将被传递给 t 的任何内容替换,但情况似乎并非如此。如果我定义了两种不同类型的列表,我会收到以下错误:
test.cpp:85: error: redefinition of ‘struct List_t_Node’
test.cpp:75: error: previous definition of ‘struct List_t_Node’
所以在上面的示例中,我希望生成 struct List_IntPtr_Node,但生成的是 List_t_Node。为什么?
【问题讨论】:
-
您应该查看预处理器的输出。例如,如果您使用 GCC,则应使用
-E标志。