のようなマクロを作成するにはどうすればよいですかBOOST_PP_SEQ_ENUM
。ただし、空のシーケンスを処理します。
#define SEQ (a)(b)
MY_BOOST_PP_SEQ_ENUM(SEQ) // expands to a,b
#define SEQ
MY_BOOST_PP_SEQ_ENUM(SEQ) // expands to nothing
のようなマクロを作成するにはどうすればよいですかBOOST_PP_SEQ_ENUM
。ただし、空のシーケンスを処理します。
#define SEQ (a)(b)
MY_BOOST_PP_SEQ_ENUM(SEQ) // expands to a,b
#define SEQ
MY_BOOST_PP_SEQ_ENUM(SEQ) // expands to nothing
ここで提案された、addという名前のこの問題に対する解決策がありました#define BOOST_PP_SEQ_ENUM_0
。「空のシーケンスなどはありません」というコメントで却下されましたが、それで問題は解決したようです。
これを使用できます:
#define PP_SEQ_ENUM(x) BOOST_PP_CAT(PP_SEQ_ENUM_0 x, _END)
#define PP_SEQ_ENUM_0(x) x PP_SEQ_ENUM_1
#define PP_SEQ_ENUM_1(x) , x PP_SEQ_ENUM_2
#define PP_SEQ_ENUM_2(x) , x PP_SEQ_ENUM_1
#define PP_SEQ_ENUM_0_END
#define PP_SEQ_ENUM_1_END
#define PP_SEQ_ENUM_2_END
これは、任意のサイズのシーケンス (256 より大きいものでも) で機能するはずです。
SEQ
空のシーケンスとして定義するだけです:
#define SEQ ()
直接使用できますBOOST_PP_SEQ_ENUM
。
ここでは、G++ 4.7.1 および VC 2010 を使用して Boost 1.47 で動作します。