8

我已经大部分时间了:

#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,但我确实需要解决方案是可变的。

任何想法如何让它发挥作用?

4

1 回答 1

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); }
于 2014-08-08T10:48:37.633 回答