2011-08-01から1ヶ月間の記事一覧

quickrun の outputter を利用して、Boost.Phoenix のエラーメッセージを見やすくする

前回の続きです。 前回は、syntax + conceal の設定で、namespace を短縮しましたが、今回は quickrun の outputter 内で直接エラーメッセージを置換してみました。 [vim] " outputter の quickfix をベースに作成 let my_outputter = quickrun#outputter#qu…

Boost.Phoenix の if 文の戻り値を let を使用して返す

前回の続き。 statement の if 文ないで、let で定義するローカル変数に結果を代入して、値を返すことが出来ます。 [ソース] #include <boost/phoenix/core.hpp> #include <boost/phoenix/operator.hpp> #include <boost/phoenix/scope.hpp> #include <boost/phoenix/statement/if.hpp> #include <boost/function.hpp> #include <string> #include <iostream> int main(){ n…</iostream></string></boost/function.hpp></boost/phoenix/statement/if.hpp></boost/phoenix/scope.hpp></boost/phoenix/operator.hpp></boost/phoenix/core.hpp>

Boost.Phoenix の Scope-let

Boost.Phoenix では、let を使用して、ローカル変数のような構文を書くことが出来ます。 [ソース] #include <boost/phoenix/scope.hpp> #include <boost/phoenix/core.hpp> #include <boost/phoenix/operator.hpp> #include <boost/phoenix/statement.hpp> #include <iostream> int main(){ namespace phx = boost::phoenix; using phx::arg_names::arg1; using…</iostream></boost/phoenix/statement.hpp></boost/phoenix/operator.hpp></boost/phoenix/core.hpp></boost/phoenix/scope.hpp>

Boost.Phoenix の if で戻り値を返す

statement の if 文では、戻り値を返すことが出来ません。 次のようなコードはエラーになります。 [エラーコード] namespace phx = boost::phoenix; using phx::arg_names::arg1; // phx::if_ の戻り値型は void boost::function<std::string(int)> f = phx::if_(arg1 >= phx::</std::string(int)>…

Boost.Phoenix のエラーをなんとか見やすくする

エラーコード中の namespace が長いので、vim の syntax を使用して短くしてみました。 [vim] " namespace を短縮して表示するように設定 syntax match boost_phoenix /boost::phoenix/ transparent conceal cchar=p syntax match boost_proto /boost::proto…

Boost.Phoenix の statement

前回の続きで、Boost.Phoenix の statement です。 [ソース] #include <boost/phoenix/statement.hpp> #include <boost/phoenix/core/argument.hpp> #include <boost/phoenix/core/reference.hpp> #include <boost/phoenix/core/value.hpp> #include <boost/phoenix/operator.hpp> #include <boost/range/algorithm/for_each.hpp> #includ…</boost/range/algorithm/for_each.hpp></boost/phoenix/operator.hpp></boost/phoenix/core/value.hpp></boost/phoenix/core/reference.hpp></boost/phoenix/core/argument.hpp></boost/phoenix/statement.hpp>

Boost.Phoenix はじまりました

Phoenix ハジマタ。 と、いうことで簡単に Starter Kit を読んだのでそれの覚え書きなど。 [ソース] #include <boost/phoenix.hpp> #include <boost/array.hpp> #include <iostream> #include <string> #include <algorithm> namespace phx = boost::phoenix; struct is_even_impl{ typedef bool result_type; template<typename Arg> bool op</typename></algorithm></string></iostream></boost/array.hpp></boost/phoenix.hpp>…

Boost.Geometry はじめてました

はじめてました。 ゲームで使うのには微妙かなーと思っていましたけど、多面体の当たり判定なんかはこっち使えば楽そうな気がしたのでちょっとつついてみました。 とりあえず、Polygon モデルだけ。 [ソース] #include <boost/geometry/geometry.hpp> #include <boost/geometry/geometries/polygon.hpp> #include <boost/geometry/geometries/point_xy.hpp> #include <boost/geometry/strategies/transform.hpp> #incl</boost/geometry/strategies/transform.hpp></boost/geometry/geometries/point_xy.hpp></boost/geometry/geometries/polygon.hpp></boost/geometry/geometry.hpp>…

VimScript のリスト操作

VimScript には、リスト操作を行う組み込み関数が用意されているんですが、複数の操作を行う場合、関数の呼び出しがネストしていて読みづらいのでちょっと考えてみた。 ついでに破壊的にリストが操作されるのもどうにかした。 [ソース] let s:algorithms = {…

ローカル変数を関数ローカルに展開する

id:thinca さんに vim script の黒魔術を教えてもらったので覚え書き。 確かにやってみるとその通りなんだけども……多分教えてもらわなかったら絶対に気づかなかった。 [ソール] function! s:map(list, expr, ...) echo l: call map(copy(a:000), "extend(l:,…