2012-06-01から1ヶ月間の記事一覧
特に意味はありませんが、youtube に Vim の動作をキャプチャした動画を上げてみました。 わたしは割りと他の人の Vim 環境が気になるんですけど、他人には需要があるかしら。 キャプチャした動画をアップロードするだけなのでそんなに難しくなかったですね…
Boost 1.50.0 がリリースされました。 Version 1.50.0 Boost 1.50.0 リリースノート(日本語版) [Clang で Boost.Proto を使用した場合の不具合] わたしも先ほど教えて頂いたのですが、clang 3.1(-std=gnu++11) で Boost.Proto を使用するとコンパイルエラー…
今までは g:quickrun_config に無理やり追加していたんですが、quickrun-hook で処理したほうがすっきりしそうなのでやってみました。 [ソース] let s:hook = { \ "name" : "add_include_option", \ "kind" : "hook", \ "config" : { \ "enable" : 0, \ }, \…
Boost.TypeErasure で処理を呼び出す際に元の型にキャストして渡しています。 template<class C, class T> struct push_back { static void apply(C& cont, const T& arg) { cont.push_back(arg); } }; std::vector<int> vec; any<push_back<_self, int>, _self&> c(vec); int i = 10; call(push_back<_self, int>(), c</_self,></push_back<_self,></int></class>…
こんな感じでどうか。 [ソース] #include <boost/preprocessor/repetition/enum.hpp> #include <sprout/string.hpp> #include <sprout/cstdlib.hpp> #include <sprout/operation.hpp> template<std::size_t Index, typename String> constexpr char at_c(String const& str){ return Index >= str.length() ? char('\0') : str[Index]; }…</std::size_t></sprout/operation.hpp></sprout/cstdlib.hpp></sprout/string.hpp></boost/preprocessor/repetition/enum.hpp>
以前、:QuickHaskell というコマンドを作成したんですが、その時に教えてもらいました。 この2つの module を使用すると比較的簡単に :QuickHaskell を定義することが出来ます。 [ソース] let g:quickrun_config["haskell/interpreter"] = { \ "outputter" :…
前回の続きです。 前回は予め各 point を作成して後から有効にしていましたが、今回は init 内で必要な point を作成しています。 [ソース] let s:hook = { \ "name" : "test2", \ "kind" : "hook", \ "config" : { \ "enable" : 1, \ "points" : "" \ }, \}…
quickrun-hook は point と機能を対にして作成しているので success_close_buffer failure_close_buffer exit_close_quickfix のような感じになっています。 しかし、これでは point ごとに hook を作成しなければなりません。 流石に point ごとに hook を…
まさに誰得。 [ソース] command! -nargs=+ Factorial \ execute [<f-args>][1] == 0 \ ? 'echo [ <f-args> ][0]' \ : 'Factorial '.([<f-args>][0]*[<f-args>][1]).' '.([<f-args>][1]-1) [コマンド] :Factorial 1 4 [出力] 24 command だと値が返せない(返す方法が思いつかなかった)ので引数が2つ</f-args></f-args></f-args></f-args></f-args>…
例えば下記の様な書き方。 [コード] template<typename T> struct X{ //error: constexpr static data member 'value' must have an initializer static constexpr T value; }; template<typename T> constexpr T X<T>::value = {}; constexpr が使えるとうっかり上記のような書き方をし</t></typename></typename>…
Haskell で対話式インタプリタを使用する場合 ghci を使うのが便利なのですが、起動するのが手間なので quickrun.vim を使用して簡易的なコマンドを定義してみました。 [コード] " 実行結果をバッファで開く command! -nargs=1 QuickHaskell :execute ":Quic…
されてました。 quickrun.vim 0.6.0 リリース - 永遠に未完成 hook-module 便利なので Vim script が書ける人はどんどん使えばいいと思います。
前回の続き。 id:tyru さんに色々とコメントを頂いてこんな感じになりました。 [ソース] command! -nargs=1 Val let <args> | :execute 'lockvar '.matchstr(<f-args>, '\zs.*\ze=') Val value = 10 echo value " 代入できないよ let value = 10 " 再代入する場合は unlet </f-args></args>…
元ネタ:型に厳格 - きっちん こういう時こそ Boost.MPL の出番ですね。 って事で簡単にやってみました。 [条件] 3つの引数に X が1つでも含まれている関数 plus を定義する [ソース] #include <boost/mpl/count.hpp> #include <boost/mpl/less_equal.hpp> #include <boost/mpl/vector.hpp> #include <boost/utility/enable_if.hpp> struct X{ X(int value) : valu</boost/utility/enable_if.hpp></boost/mpl/vector.hpp></boost/mpl/less_equal.hpp></boost/mpl/count.hpp>…
:lockvar コマンドを使用します。 [ソース] let value = 42 lockvar value let value = 10 " error 変数名を渡す事で、その変数が書き換えできないようにします。 便利な機能なのでいろんなところで使いたいんですけど :lockvar に変数を渡さないとダメなの…
jsx 側でコード補完を行う機能が実装されたので、それを使用して neocomplcache の source を書きました。 先に行っておくと非同期ではないのでレスポンスが悪いです。 また、コード補完機能が実装されている JSX の git は master の branch ではないので注…
Twitter で教えてもらったので覚書。 std::move というと rvalue reference にキャストする関数の方が有名だと思うんですが、sequence の要素を move する algorithm があります。 std::copy の move 版ですね。 使い方も std::copy を同じです。 [ソース] #…
ちょっと前からですが、id:boleros さんの constexpr ライブラリ Sprout を fork して example を pull request とかしています。 GitHubへpull requestする際のベストプラクティス - hnwの日記 まぁ単純にわたしが『Sprout の example 欲しい』っていうのも…
ちょっとつついて見たのでついでに書いてみました。 neocomplcache-snippets-complete-jsx - github :NeoBundle "git://github.com/osyo-manga/neocomplcache-snippets-complete-jsx.git" JSX 歴5時間の輩が書いたので、気になった部分があれば fork するな…
こんな感じ。 [ソース] let s:hook = { \ "name" : "kao", \ "kind" : "hook", \ "is_success" : 0, \ "config" : { \ "enable" : 1 \} \} function! s:hook.on_success(...) let self.is_success = 1 endfunction function! s:hook.on_failure(...) let sel…
メンバ関数を呼び出すクラス定義と特殊化を行うことで拡張する事が出来ます。 push_back メンバ関数を呼び出す場合はこんな感じになります。 [ソース] #include <boost/type_erasure/any.hpp> #include <boost/type_erasure/any_cast.hpp> #include <boost/type_erasure/builtin.hpp> #include <iostream> #include <vector> #include <list> template<typename C, typename T> struct push_…</typename></list></vector></iostream></boost/type_erasure/builtin.hpp></boost/type_erasure/any_cast.hpp></boost/type_erasure/any.hpp>
と、言うことで以前から気になっていた Boost.TypeErasure をちょっとつついてみました。 [ソース] #include <boost/type_erasure/any.hpp> #include <boost/type_erasure/any_cast.hpp> #include <boost/type_erasure/builtin.hpp> #include <boost/type_erasure/operators.hpp> #include <boost/mpl/vector.hpp> #include <iostream> struct X{ X() : value(0…</iostream></boost/mpl/vector.hpp></boost/type_erasure/operators.hpp></boost/type_erasure/builtin.hpp></boost/type_erasure/any_cast.hpp></boost/type_erasure/any.hpp>
TL にちょろっと話が出てきたので久々に試してみました。 今は ver 0.14.0 ですかね。 かなり構造が変わったみたいで、以前から問題になっていた関数ポインタ回りが改善されていました。 これでやっと OGLplus 側のコードを変更しないでも Windows で使用で…
Review Request も出ているみたいなので、そろそろつついてみようかなーと思いソースコード探していました。 svn Formal Review Request: TypeErasure ちょっと遊んでみるかなー。
いつも最新版の PStade のコードを探している気がするので覚書。 svn-trunk github github は svn のミラーなので反映されるまでに若干タイムラグがあるみたい。 svn が使えるならそっちを参照したほうがいいですね。
昨日の続き。 コメントで oven::memoized を使用すればうまくいくと教えてもらいました。 と、いう事でこんな感じになりました。 [ソース] #define BOOST_RESULT_OF_USE_DECLTYPE #include <iostream> #include <string> #include <vector> #include <fstream> #include <boost/range/adaptor/transformed.hpp> #include <pstade/oven/concatenated.hpp> #include </pstade/oven/concatenated.hpp></boost/range/adaptor/transformed.hpp></fstream></vector></string></iostream>
PStade.Oven とかを使って下記のようなコードになりました。 [ソース] #define BOOST_RESULT_OF_USE_DECLTYPE #include <iostream> #include <string> #include <vector> #include <fstream> #include <iterator> #include <boost/range/adaptor/transformed.hpp> #include <pstade/oven/concatenated.hpp> #include <pstade/oven/copied.hpp> int ma…</pstade/oven/copied.hpp></pstade/oven/concatenated.hpp></boost/range/adaptor/transformed.hpp></iterator></fstream></vector></string></iostream>
そういえば、こんな使い方が出来るのよね。 関数テンプレートを直接渡せないのが悲しいけど面白い。 [ソース] #include <sprout/math/sqrt.hpp> template<typename T> constexpr T length(T x, T y, T z){ return sprout::sqrt(x * x + y * y + z * z); } #define BOOST_RESULT_OF_USE_DECLTYPE</typename></sprout/math/sqrt.hpp>…
関連:Experimental Clang Binaries for Mingw32/x86 でコンパイラが死んだ\(^o^)/ 上記の問題と LLVM 3.1 をソースコードからビルドした場合でもクラッシュすると聞いたので自前でビルドして試してみました。 ひとまず、上記の問題に関しては自力でビルド…
どこかにまとまっていれば便利かなーと思いとりあえず、手元にあったのを簡単にまとめてみた。 [注意点] ネットで C++11 に関して調べる時の注意点ですが、古い言語仕様(C++0x)のまま書かれているコードが載っている事があります。 ブログの記事などを参考に…