如何将宏扩展的结果分成不同的参数?
|
我正在编写一些Boost.Preprocessor元程序,但存在以下问题。请考虑以下宏(这是为了简化说明问题):
#define ITERATION_IMPL(p1, p2, p3, p4) ((p1),(p2),(p3),(p4))
#define ITERATION(args) ITERATION_IMPL(hello, args(), world)
#define ARGS() a, b
ITERATION(ARGS)
预处理后的输出是这样的:
((hello),(a, b),(world),())
这表明“ 2”没有分成多个参数。根据我对标准的理解,宏的参数在粘贴到替换列表之前已被完全扩展。因此,我期望以下扩展顺序:
ITERATION(ARGS)
ITERATION_IMPL(hello, ARGS(), world)
ITERATION_IMPL(hello, a, b, world)
((hello),(a),(b),(world))
那是我想要的结果。如何在不修改ѭ4和调用本身的情况下实现它?
编辑:如果不可能(我猜是这样),请根据C或C ++的任何标准进行解释。
没有找到相关结果
已邀请:
1 个回复
完趣镐
,则需要
,将
替换为
,然后重新扫描。
是
的调用。因此,它取
,并将and12ѭ替换为
(以及其他参数)。然后重新扫描并解析为
。我不知道为什么它会在您的情况下调用带有3个参数的4参数宏。 你可以做
这将花费
,替换为
,然后重新扫描,从而使
替换为ѭ19replaced。生成的令牌字符串ѭ20then会达到您的预期。 编辑:测试与海湾合作委员会:) 编辑:我注意到您想要字符串
,但是我的答案却产生了字符串
。我认为这是因为当调用
后重新扫描时,它将it24ѭ替换为
。然后它将需要再次扫描以注意它现在可以使用这些参数调用
。所以
应该是
当外部
的
替换为ѭ31substituted时,它将重新扫描并产生
来调用
。然后它再次重新扫描以查找
,并产生您真正想要的序列。