X-マクロと進みました。プリプロセッサ?
-
13-10-2019 - |
質問
分割することから私の質問に関して を追加するCPPマクロ:
ではここの が進みました。プリプロセッサ 図書館のデータタイプを実装するようなX-マクロ?
解決
うたう X-マクロ っていると思いたいものを好きなように聞こうとしているのです。
私は簡単-迅速に支援serialisationのためのかなり似てます。問題のあったかといった変換実行時情報(int)にコンパイル時の型(クラス)ができることが私のserialisation.って書いてカップルの場合には諸表になったとしていますの更新にかかれたかったのを追加します。
この問題を回避するには、最初に定義され 配列 の タプル を含むマッピング:
#define WIN_MESSAGE_TYPE_SEQ \
((EM_REPLACESEL, em_replacesel))((WM_CHAR, wm_char)) //...
上の場合は名前を定義していることがintの下の場合名が授業のうどこかで定義されます。
ましこのシーケンスとの ブpreprocessors をあらゆるコードでした。例えば、前向き宣言の授業でい:
#define WIN_MESSAGE_TYPE_BUILD_MACRO(r, _data_, _elem_) \
class BOOST_PP_TUPLE_ELEM(2,1,_elem_);
BOOST_PP_SEQ_FOR_EACH(WIN_MESSAGE_TYPE_BUILD_MACRO, BOOST_PP_NIL, WIN_MESSAGE_TYPE_SEQ)
#undef WIN_MESSAGE_TYPE_BUILD_MACRO
のランタイムをコンパイル時間のマッピング、生成するシリーズの場合は諸表のようになります:
#define WIN_MESSAGE_TYPE_BUILD_MACRO(r, _data_, _elem_) \
case BOOST_PP_TUPLE_ELEM(2,0,_elem_): return win_message_serializer<BOOST_PP_TUPLE_ELEM(2,1,_elem_)>::serialize(msg, o_arch);
template <typename Archive>
void serialize_win_message (p_win_message_base msg, Archive& o_arch) {
message_type_t message_type = msg->type();
switch (message_type) {
// This will generate a series of case statement for each message type that will invoke
// the serializer for the correct types.
BOOST_PP_SEQ_FOR_EACH(WIN_MESSAGE_TYPE_BUILD_MACRO, BOOST_PP_NIL, WIN_MESSAGE_TYPE_SEQ)
default: //...
};
}
#undef WIN_MESSAGE_TYPE_BUILD_MACRO
全体のコードはかなりビット以上のここだまのアイデアを出すにはどうしたらいいんでコードの向上preprocessors.私の例できます迅速かつ簡単に追加serialisation支援のためのクラスで更新私のシーケンスです。
ことがあげぷんとても読みやコードするようにしていく、マクロ使用の各マクロとして簡単なことです。もくださればどこかにはよりエレガントな解決方法です。このようなたのための個人的なプロジェクトが静かに複雑になります。
所属していません StackOverflow