2008-12-07 TinyJSON
■[C/C++]
Boostを駆使したC++製JSONパーサ、TinyJSONというのがあるらしい。
ソースは
総本山は
取り敢えず、何も考えずにテストしようとするも
/home/use/include/tinyjson/tinyjson.hpp: In function 'typename json::grammar<typename Iterator::value_type>::variant json::parse(const Iterator&, const Iterator&)':
/home/user/include/tinyjson/tinyjson.hpp:549: error: expected `;' before 'st'
/home/user/include/tinyjson/tinyjson.hpp:550: error: 'st' was not declared in this scope
と怒られる。使っているのはgccの4.1.2(大分古いな……)。これは多分テンプレート化されたクラスの中の型を参照しようとした時、コンパイラは型か値か判断できずに困るのでtypenameを付けましょうという例のアレだろう。
549行目を
json::grammar< typename Iterator::value_type >::stack st;
から、
typename json::grammar< typename Iterator::value_type >::stack st;
へ変えるとコンパイル成功。行頭にtypenameを付けただけ。
実際にパーサを使おうとすると更に564行目でも怒られるので、
return json::grammar< typename Iterator::value_type >::variant(new boost::any());
これを
return typename json::grammar< typename Iterator::value_type >::variant(new boost::any());
とまたtypenameを付けた。これで漸く問題なくコンパイルできるように。
(2008.12.11)
設定ファイルとしてJSONを使えるように、アクセサを作成中。
json::JsonAccessor accessor("test.json") ; std::string str(accessor["key1"][0]) ; //"value1" double x = accessor["key1"][1].to_f() ; //"1.345e+02" int i = accessor["key1"][2].to_i() ; //"245"
こんな感じにできたら良いな。
(2008.12.12)
できた。上の通りに。
ただBoost使いまくりの手抜きしまくり。lexical_castとshared_ptrの雨あられ。
仮想関数の使い方も何か間違ってる気がするので後で見直そう。うう。
- 6 http://www.pressarmy.com
- 4 http://d.hatena.ne.jp/ousttrue/20081121/1227292635
- 3 http://www.google.co.jp/search?hl=ja&client=firefox-a&rls=org.mozilla:ja:official&q=cygwin+x+日本語+quail&btnG=検索&lr=lang_ja
- 2 http://blog-search.yahoo.co.jp/search?fr=top_ga1&ei=UTF-8&p=manzo
- 2 http://blog.cincs.net/item/155.html
- 2 http://d.hatena.ne.jp/keyword/C++
- 2 http://d.hatena.ne.jp/ousttrue/20081217/1229479607
- 2 http://detail.psearch.yahoo.co.jp/i/eLIZ9iJ09chVjf_e_GVSsj/
- 1 http://blog-search.yahoo.co.jp/search?ei=UTF-8&p=white+white+sisters&n=10&so=dd&merge=on&tflg=none&sq=M&b=3
- 1 http://blog-search.yahoo.co.jp/search?fr=top_ga1&ei=UTF-8&p=サメミロン

