簡體   English   中英

C++ 宏只獲得偶變量 arguments 通過

[英]C++ Macro to get only even variadic arguments passed

是否可以制作一個ONLY_EVEN()宏來執行以下翻譯:

ONLY_EVEN0()
ONLY_EVEN2(a,b) b
ONLY_EVEN4(a,b,c,d) b,d

使用任意數量的 arguments,使用可變宏參數?

可能不是無限數量的 arguments。

然而,任何可變數量的 arguments 到任意選擇的界限都是可能的。 例如,下面是 [0..6] 中任意數量的 arguments 的獨立宏解決方案,可以通過明顯的方式擴展以支持您希望的任何限制。

#define ONLY_EVEN0(a) 
#define ONLY_EVEN1(a) 
#define ONLY_EVEN2(a,b) b
#define ONLY_EVEN3(a,b,c) b
#define ONLY_EVEN4(a,b,c,d) b,d
#define ONLY_EVEN5(a,b,c,d,e) b,d
#define ONLY_EVEN6(a,b,c,d,e,f) b,d,f
#define ONLY_EVEN_N(a,b,c,d,e,f,n,...) ONLY_EVEN##n
#define ONLY_EVEN(...) ONLY_EVEN_N(__VA_ARGS__,6,5,4,3,2,1,0)(__VA_ARGS__)

// example:
0: ONLY_EVEN()
1: ONLY_EVEN(A)
2: ONLY_EVEN(A,B)
3: ONLY_EVEN(A,B,C)
4: ONLY_EVEN(A,B,C,D)
5: ONLY_EVEN(A,B,C,D,E)
6: ONLY_EVEN(A,B,C,D,E,F)
$ g++ -std=c++11 -pedantic -E onlyeven.cpp | grep -v '#'
0:
1:
2: B
3: B
4: B,D
5: B,D
6: B,D,F

請注意,根據 C/C++ 規范,預處理器只能保證最多接受 256 個 arguments。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM