Entries

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Boost.Preprocessorでタプルのシーケンスを作るには

タグ: C++ Boost

Boost.Preprocessorタプルを要素とするシーケンスを作る場合、通常はこのように書く。

((hoge, fuga))((foo, bar))

これを

(hoge, fuga)(foo, bar)

この形から生成できないものかと調べてみたら、メーリングリストにそのものずばり解法が上がっていた

#include <stdio.h>
#include <boost/preprocessor.hpp>

#define MAKE_SEQ(size, rel) MAKE_SEQ_D(size, rel)
#define MAKE_SEQ_D(size, rel) \
    BOOST_PP_CAT( \
        MAKE_SEQ_A_ ## size rel, \
        0X0 \
    )() \
    /**/

// size 2
#define MAKE_SEQ_A_2(x, y) ((x, y)) MAKE_SEQ_B_2
#define MAKE_SEQ_B_2(x, y) ((x, y)) MAKE_SEQ_A_2

#define MAKE_SEQ_A_20X0()
#define MAKE_SEQ_B_20X0()

int main()
{
	printf(
		"sequence: %s",
		BOOST_PP_STRINGIZE(
			MAKE_SEQ(2, (hoge, fuga)(foo, bar))
		)
	);
}
sequence: ((hoge, fuga)) ((foo, bar))

こういうのがさらっと思いつけばなぁ( ´∀`)

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/175-59651b73
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。