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