[英]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.