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

今年お世話になったツール

今年最後の記事です。 最後は今年お世話になったツールとか。 本当は Boost.QVM について書きたかったけど無理そうなので来年にする。 プログラミング回り Vim 言わずもがな まさにライフがハックされてチェンジしました Visual Studio コーディングは Vim …

Boost.TTI

レビューが終わったのが8月なので今更かよ!って感じですが。年内のうちに書いておかったので書きます。 一部のメタプログラマ歓喜の Type Traits Introspection ライブラリです。 [関連] Boost.TTIが採択されました - Faith and Brave - C++で遊ぼう [Type …

Vim script で self をローカルに展開する

辞書関数内で自分にアクセスする為には self を使わないとダメなんですが、ちょっと手間だったんでローカルに展開するようにしてみました。 [ソース] let dict = {} let dict.name1 = "homu" let dict.name2 = "mami" let dict.name3 = "mado" function! dic…

unite-life-game

vim

と、いう事で unite.vim でライフゲームをつくってみました。 ライフゲームについてはここら辺を読んでみてください。 最初に言い訳しておくと結構アレな感じになってしまったのでレスポンスは悪いです。 [Vimプラグイン] unite-life-game - github [コマン…

Variadic Templates から range-based for へ

C++

とか書いてみました。 [ソース] #include <iostream> #include <type_traits> template<typename ...Args> using common_type = typename std::common_type<Args...>::type; template< typename ...Args, typename CommonType = common_type<Args...> > void disp(Args&&... args){ for(auto&& n : { static_cast<CommonType>(args)..</commontype></args...></args...></typename></type_traits></iostream>…

Vim の の挙動を変える

バッファを終了する際に を使っているんですが、これだとバッファが削除されるわけではないので、どんどんバッファが溜まっていってしまいます。 という事で、終了するバッファが他のタブ(ウィンドウ)で開いていないならバッファを削除するという挙動にし…

unite-action に tab drop コマンドを追加する

vim

ファイルをタブで開く時に『既にファイルが開いているならがあるなら新規タブを作らないでそっちに移動して欲しい』って事は結構あると思います。 Vim では :tab drop {file} というコマンドで『既にファイルが開いていたらそこに移動して、なければ新しいタ…

reverse_tuple

C++

ちょっと書いてみました。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/tuple.hpp> template<typename Tuple> struct reverse_tuple{ Tuple tuple; }; namespace sprout{ namespace tuples{ template<std::size_t I, typename Tuple> struct tuple_element<I, reverse_tuple<Tuple>> : tuple_…</i,></std::size_t></typename></sprout/tuple.hpp>

unite-xmas-tree

vim

メリークリスマス! ってことで unite.vim でクリスマスツリーつくったよ! さっきまで、ぼっちクリスマスパーティしていたけど全然悲しくないよ! [Vimプラグイン] unite-xmas-tree - github [コマンド] :Unite xmas-tree -update-time=1000 -cursor-line-h…

constexpr な bind1st

C++

ついでにカリー化も。 [ソース] #include <functional> #include <type_traits> namespace aliases{ template<typename T> using remove_reference = typename std::remove_reference<T>::type; } // namespace aliases template<typename F, typename First> struct bind1st_impl{ template<typename ...Args> constexpr auto operator …</typename></typename></t></typename></type_traits></functional>

unite-sl

vim

走らせました。 [元ネタ] Emacs で SL - とりあえず暇だったし何となく始めたブログ [Vimプラグイン] unite-sl - github [コマンド] :Unite sl -update-time=10 -cursor-line-highlight=Normal うーん、いまいち面白みが足りないですね。

Vim script で文字列を文字数単位で split する

vim

こういうテクニックは全然知識が無いですね…。 Twitter で教えてもらったので覚え書き。 [コマンド] " 2文字ごとに分割する echo split("ほむまみまど",'..\zs') [出力] ['ほむ', 'まみ', 'まど'] 文字数を変える場合は、. で調節します。

Boost Formal Review Schedule

Boost Formal Review Schedule このページの存在を知らなかったので覚え書き。 Boost のレビューのスケジュール表です。 Boost.QVM とかはレビュアー待ちなのかな?

neobundle.vim はじめました

vim

なんだかんだで食わず嫌いしていた neobundle.vim ですが、やっと使い始めました。 neobundle.vim - github 便利便利。 使い方とかはここら辺を参照すればいいと思います。 とりあえず、こことかを参照して知っている unite-source を全て書きだして見ました…

constexpr な fusion::invoke

まぁそんな感じの処理です。 関数の引数を Tuple で渡して評価します。 [ソース] #define SPROUT_CONFIG_SUPPORT_TEMPORARY_CONTAINER_ITERATION #include <sprout/tuple.hpp> template<std::size_t... Indices> struct index_tuple{}; template< std::size_t Start, std::size_t Finish, std::size_t S</std::size_t...></sprout/tuple.hpp>…

neocomplcache-clang_complete

neocomplcache と clang_complete を併用して使用する事が出来る、neocomplcache-clang_complete というプラグインをつくりました。 [注意] 現在この問題は解決されました。 詳しくはこちらを参照下さい。 名前が安直なのは仕様です。 [問題点] 両プラグイン…

std::initializer_list で constexpr

C++

規格の方は確認してないんですが、gcc 4.7 では動作しました。 [ソース] #include <initializer_list> template<typename T> constexpr auto front(std::initializer_list<T> list) ->decltype(*list.begin()){ return *list.begin(); } template<typename T> constexpr auto at(std::initializer_list<T> lis</t></typename></t></typename></initializer_list>…

unite-nyancat_anim

vim

元ネタはこちら。 unite-nyancat - Big Sky nyancat.vimの裏話 - KaoriYa これを unite.vim で動かしてみました。 実際のデータとかは両プラグインから拝借。 [Vimプラグイン] unite-nyancat_anim - github [コマンド] :Unite -update-time=10 -winheight=30…

unite-jojo

vim

思いついたのでサッと書いてみました。 まぁなんかそんな感じです。 [Vimプラグイン] unite-banban2 - github [コマンド] "example command :Unite -cursor-line-highlight=Normal -winheight=8 -update-time=10 -buffer-name=ora jojo:オラ :Unite -cursor-…

unite-banban2

vim

またつくりました。 今度は二次元! [Vimプラグイン] unite-banban2 - github [unite.vim の設定] " アニメーションの速度 let g:unite_update_time = 200 let g:unite_cursor_line_highlight = "Normal"

User-defined literals で16進数を表示

C++

文字列で受け取る場合は、prefix も一緒に渡されるんですねー。 [ソース] #include <iostream> char const* operator "" _c_str(char const* str){ return str; } int main(){ std::cout << 0xff << std::endl; std::cout << 0xff_c_str << std::endl; std::cout << 07</iostream>…

clang で Uniform initialization

ありゃ、clang でも Uniform initialization 使えたんですね。 知らなかった…。 [ソース] #include <string> #include <cassert> struct X{ int n; std::string str; }; X func(){ return {0, "homu"}; } int main(){ X x{0, "homu"}; auto x2 = func(); assert(x.n == 0); as</cassert></string>…

でエラー

ちとハマったので覚え書き。 #include <boost/range/any_range.hpp> int main(){} のように だけだと any_range.hpp 内でコンパイルエラーになります。 // 先に include する #include <boost/range/concepts.hpp> #include <boost/range/any_range.hpp> int main(){} 先に を include する事で解決しました。 一応、チケットに上がっているみ</boost/range/any_range.hpp></boost/range/concepts.hpp></boost/range/any_range.hpp>…

unite-banban バン(∩`・ω・)バンバンバンバン゙ン

vim

つくりました某プラグインのパクですが。 かわいいですね。 [Vimプラグイン] unite-banban - github [unite.vim の設定] " アニメーションの速度 let g:unite_update_time = 200 let g:unite_cursor_line_highlight = "Normal" ふぅ…また Vim がかわいくなっ…

unite-rofi

vim

つくったよ(/ω・\)チラッ これをつかえば女子力アップですね☆(ゝω・)vキャピ データはここから使わせて頂きました(〃ノωノ)キャッ 桜花あどべんとかれんだぁ(12日目) - ひよっこプログラマのプログラミング [Vimプラグイン] unite-rofi - github [キーマッピング]…

::value を短くする

C++

最近、よく使っているんですが、std::integral_constant は、 constexpr operator value_ type() { return value; } を定義しているのでこんな感じで渡すことも出来ます。 [ソース] #include <iostream> #include <type_traits> extern void* enabler; template<bool B, typename T = void> using enabler_if = </bool></type_traits></iostream>…

template で T&&

C++

rvalue reference については、こことか、こことか、ここら辺に詳しく書いてあります。 さて、rvalue reference ですが、簡単に説明すると次の様な挙動になります。 int n = 0; int&& x1 = 0; int&& x2 = n; // error これは関数で受け取る場合も同様で、 vo…

unite-shimapan

vim

つくりました。 なんという unite.vim のムダ使い。 colorscheme の背景が黒っぽい方が見栄えがいいと思います。 [Vim plugin] unite-shimapan - github [vimrc] " カーソル行のハイライトがかぶるのが嫌な場合 let g:unite_cursor_line_highlight = "Normal…

Template Aliases で enable_if を短くしてみた。

C++

逆に違和感があってなんかアレ。 [ソース] #include <type_traits> #include <iostream> template<bool B, typename T = void> using enable_if = typename std::enable_if<B, T>::type; template<bool B, typename T = void> using enabler_if = typename std::enable_if<B, T>::type*&; extern void* enabler; template</b,></bool></b,></bool></iostream></type_traits>

Template Aliases すごい

C++

なぜ、今まで気づかなかったんだ。 [ソース] #include <type_traits> template<typename T> using add_pointer = typename std::add_pointer<T>::type; template<typename T> using add_const = typename std::add_const<T>::type; template<typename T> using remove_const = typename std::remove_const<T>::type; tem</t></typename></t></typename></t></typename></type_traits>…