boost::fusion::for_each

以前エントリした『boost::tuple で for_each のような処理』で、
id:gintenlaboさんから
「boost::fusion で出来るよ」
と、コメントを頂いたのでやってみました。

#include <string>

#include <boost/fusion/include/vector.hpp>

struct print_impl{
    template<typename T>
    void operator ()(const T& rhs) const{
        std::cout << rhs << "\n";
    }
} print;


int
main(){
    
    namespace fusion = boost::fusion;

    fusion::vector<std::string, int, int>    creature("甲鱗のワーム", 7, 6);

    fusion::for_each(creature, print);
    
    return 0;
}

出力結果

甲鱗のワーム
7
6

何これすごい。
いまいち boost::fusion を理解していなかったので、
改めて調べてみたら boost::tuple の強化版って認識で問題ないのかな。
boost::tuple で、STL みたいな処理や MPL が使えるのですごく便利(らしい)。
vector って言うぐらいだから単に boost::tuple の配列版だと思ってた\(^o^)/


なんというか久々に変態なライブラリを見た気がする。
いろんな事が出来るのでいじってて楽しいです。
fusion::list や fusion::map とかどう使うんだろうか・・・。
ちょっとずつ試してみたいです。


[boost]
ver 1.44.0

[参照]
http://d.hatena.ne.jp/faith_and_brave/20080403/
http://www.kmonos.net/alang/boost/classes/fusion.html
http://www.boost.org/doc/libs/1_44_0/libs/fusion/doc/html/index.html