clang::ASTContext::types_begin()だと、クラスが重複して反復されてしまう。これをなんとかしたい。でもclang::Typeやclang::CXXRecordDeclにはoperator==()がないので、反復済みかどうかの判定では対処できない。
clang::Typeのメンバ関数に、getTypeClass()というものがあった。これを調べてみると重複されて反復されるclang::Typeは片方がRecordでもう片方がElaboratedであるようだ。
clang::ASTContext::const_type_iterator t = astContext.types_begin(); clang::ASTContext::const_type_iterator eot = astContext.types_end(); for(; t != eot; ++t) { if((*t)->getTypeClass() == clang::Type::Elaborated) { continue; }
これでOKになった。clang::Type::Recordのみ通すようにすれば確実性は上がるだろう。
※問題は、これが何を意味するのかさっぱり理解していないところだ・・・。
ところで、今年12/3のboost勉強会(#7)ではclangやるセッションがいくつかあるのね・・・。カミさんと日程調整していたら参加が締め切られてorz。
0 件のコメント:
コメントを投稿