metamacro_if_eq如何在extobjc中运行

时间:2014-05-21 04:52:43

标签: objective-c

阅读源代码https://github.com/jspahrsummers/libextobjc/blob/master/extobjc/metamacros.h#L158

// expands to true
metamacro_if_eq(0, 0)(true)(false)

当手动展开宏metamacro_if_eq(0,0)时,我得到以下内容

metamacro_if_eq0(0) (true) (false)

继续扩展。

metamacro_if_eq0_0() (true) (false)

继续。

metamacro_consume_ (true) (false)

metamacro_consume is defined as: 
#define metamacro_consume_(...)  // why nothing here ?

然后我怎样才能得到" true"的预期值。 ?

1 个答案:

答案 0 :(得分:1)

您的作品不正确。操作如下:

metamacro_if_eq(0, 0)(true)(false)

metamacro_concat(metamacro_if_eq, 0)(0)(true)(false)

metamacro_concat_(metamacro_if_eq, 0)(0)(true)(false)

metamacro_if_eq0(0)(true)(false)

metamacro_concat(metamacro_if_eq0_, 0)(true)(false)

metamacro_concat_(metamacro_if_eq0_, 0)(true)(false)

// You made a mistake at this point.

metamacro_if_eq0_0(true)(false)

true metamacro_consume_(false)

true

第二轮连接后,true成为metamacro_if_eq0_0()的参数。该宏的参数保留在原位。 metamacro_consume_()接受任何数量的论证,并解决任何问题。