Metaparse である mpllibs を触ってみる

今年開催される『C++Now! 2012』のセッションの一つに
テンプレートメタプログラミングによるコンパイル時構文解析
なるものが存在しているのですが、github でライブラリが公開されていたのでちょっとつついてみました。


とりあえず、safe_printf とかがあったのでそれを試してみました。

[ソース]

#include <mpllibs/safe_printf/printf.hpp>
#include <mpllibs/metaparse/string.hpp>
#include <boost/mpl/print.hpp>


int
main(){
    namespace safe = mpllibs::safe_printf;
    using safe::printf;

    printf<MPLLIBS_STRING("name:%s, age:%d\n")>("homu", 14);
//  printf<MPLLIBS_STRING("name:%s, age:%d\n")>(13, "mado");    // 引数型が正しくないのでコンパイルエラー
    
    auto name = "mami";
    auto age  = 15;
    printf<MPLLIBS_STRING("name:%s, age:%d\n")>(name, age);

    return 0;
}

[出力]

name:homu, age:14
name:mami, age:15

ちょっとなにいっているかがわからないですね。
コードを見れば分かると思いますがテンプレート引数にフォーマットを渡して、値を関数の引数で渡しています。
どうやっているんだろうか。


余談ですが『C++Now! 2012』のセッションがどれも面白そうで鼻血が出そうですね。
個人的には『型から文字列への変換と、その逆』や『SolidFireではC++11への移行をいかにして成しとげたか』辺りが気になります。

[boost]

  • ver 1.49.0

[コンパイラ]

  • g++ (GCC) 4.7.0 20120218 (experimental)
  • clang++ (LLVM) 3.1 20120327(trunk)