我已经大部分时间了:
#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
,但我确实需要解决方案是可变的。
任何想法如何让这个工作?
答案 0 :(得分:6)
使用COUNT()
,您有一个空参数。
您可以使用以下内容:
#define PP_IS_EMPTY(...) (#__VA_ARGS__[0] == '\0' ? 1 : 0)
#define PP_COUNT(...) ((!PP_IS_EMPTY(__VA_ARGS__)) * (BOOST_PP_VARIADIC_SIZE(__VA_ARGS__)))
或者,可变参数模板可能是一种解决方案。
template <typename ... Ts>
constexpr std::size_t Count(Ts&&...) { return sizeof...(Ts); }