【发布时间】:2011-08-18 23:20:35
【问题描述】:
我正在处理调用宏,
#define CALL(f,...) FN(f)->call((ref(new LinkedList()), __VA_ARGS__))
调用时,
CALL(print,2,3,4,5);
将 2 3 4 5 添加到链表(为此已重载)并调用 print 期望链表按预期工作但是有一些调用不需要参数,
CALL(HeapSize);
它仍然需要一个链接列表,但是一个空列表,上面不起作用,我正在尝试提出一个可以与任何一种样式一起使用的宏?
编辑:通过 gcc 文档挖掘我发现在 VA_ARGS 之前添加 ## 会删除 ,当没有参数但我无法嵌套宏时,
CALL(print,CALL(HeadSize));
这会导致 CALL 未定义错误,但是如果我将调用分开,它会起作用
【问题讨论】:
-
您可以将
CALL委托给不同的宏,具体取决于传递的参数数量。我演示了如何做到这一点in an answer to another question。这不需要任何特定于实现的 hack。
标签: c++ gcc c-preprocessor variadic-macros