【发布时间】:2014-10-01 15:43:42
【问题描述】:
我已经走了大部分路了:
#include <boost/preprocessor.hpp>
#define COUNT(...) BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)
COUNT(1,2,3)
COUNT(1,2)
COUNT(1)
COUNT()
在 GCC 中使用 -E 标志运行它会输出以下内容
3 2 1 1
当我需要的是:
3 2 1 0
我在这里做错了什么?我不打算使用boost preprocessor,但我确实需要可变参数的解决方案。
任何想法如何让它工作?
【问题讨论】:
-
@JoachimPileborg 我正在运行带有
-E标志的g++来扩展宏。它是可验证的。 -
COUNT()正在传递一个参数;它只是空的。 -
我没怎么用过 Boost.Preprocessor,所以这可能太复杂了,但是
BOOST_PP_IF(BOOST_PP_GREATER(BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), 1), BOOST_PP_VARIADIC_SIZE(__VA_ARGS__), BOOST_PP_NOT(BOOST_PP_IS_EMPTY(__VA_ARGS__)))有用吗?