1

のようなマクロを作成するにはどうすればよいですか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
4

3 に答える 3

1

ここで提案された、addという名前のこの問題に対する解決策がありました#define BOOST_PP_SEQ_ENUM_0。「空のシーケンスなどはありません」というコメントで却下されましたが、それで問題は解決したようです。

于 2013-01-03T15:52:17.493 に答える
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 より大きいものでも) で機能するはずです。

于 2013-01-12T02:07:08.507 に答える
0

SEQ空のシーケンスとして定義するだけです:

#define SEQ ()

直接使用できますBOOST_PP_SEQ_ENUM

ここでは、G++ 4.7.1 および VC 2010 を使用して Boost 1.47 で動作します。

于 2013-01-03T05:08:11.020 に答える