2010年12月09日

BOOST_PP_SEQ_FOR_EACHは、第1引数に指定したマクロの中でBOOST_PP_SEQ_FOR_EACHが使えない?

#include <iostream>
using namespace std;
 
#include <boost/preprocessor.hpp>
 
#define M2(r, data, elem) elem
#define M1(r, data, elem) BOOST_PP_SEQ_FOR_EACH(M2, data, elem)
 
int main()
{
        // M1のBOOST_PP_SEQ_FOR_EACHが解釈されない
        cout << BOOST_PP_STRINGIZE(BOOST_PP_SEQ_FOR_EACH(M1, data, ((1)(2)(3))((4)(5)(6)))) << endl;
 
        // M1を直接呼ぶと、~SEQ_FOR_EACHは解釈されている
        cout << BOOST_PP_STRINGIZE(M1(_, data, (10)(11)(12))) << endl;
        
        // BOOST_PP_SEQ_FOR_EACHで呼び出したマクロ中で、BOOST_PP_SEQ_FOR_EACHは使えないのか?
}

とすると、

BOOST_PP_SEQ_FOR_EACH(M2, data, (1)(2)(3)) BOOST_PP_SEQ_FOR_EACH(M2, data, (4)(5)(6))
10 11 12

これこの通り

上のコードはテストの為に単純化してて、これくらいならBOOST_PP_SEQ_FOR_EACH_PRODUCT使えばいけるんじゃないかなぁと思うけど、
内側のsequencesの特定の要素だけ別の処理を行いたい、といった場合は駄目だろうし。

うーん…………何でだろう?

posted by 天井冴太 at 19:00| Comment(0) | TrackBack(0) | Question | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は180日以上新しい記事の投稿がないブログに表示されております。