繁体   English   中英

如何计算传递给可变参数宏的宏参数的数量?

[英]How do I count the number of macro arguments passed to a variadic macro?

我已经大部分时间了:

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

任何想法如何让这个工作?

使用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); }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM