假设我有一个宏:
这个很好用:
请注意,我需要一种解决方案,在
#define FOO(a, ...) if (a) foo(a, ## __VA_ARGS__)
这个很好用:
FOO(a)
将被转换为if (a) foo(a)
FOO(a, <some_parameters>)
将被转换为if (a) foo(a, <some_parameters>)
__VA_ARGS__
的第一个参数(如果存在)传递给foo
? 因此,我需要:
FOO(a)
被转换为if (a) foo(a)
FOO(a, b, <some_parameters>)
被转换为if (a) foo(a, b)
BOOST_PP_VARIADIC_SIZE
相同的想法来解决这个问题,但是结果这个宏对于BOOST_PP_VARIADIC_SIZE()
(空参数)返回1
,这不是预期的(我希望得到0
)。请注意,我需要一种解决方案,在
bool(a)
为true
时仅计算b
和<some_parameters>
。
foo
。如果该条件为假,则不调用foo
,也不评估其参数)。 - gezaa
、b
和<some_parameters>
的类型都相同吗? - Hiroki