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

LLVM 3.0 は、11月16日リリース予定

いつの間にか公式サイトのリリーススケジュールが更新されていました。 リリースまでの流れは以下のとおり。 10月14日 - Create 3.0 branch 10月16日 - First round of testing starts 10月23日 - First round of testing ends / Bug fixing begins 10月30日…

可変長引数を initializer_list で受け取る

C++

同じ型を受け取る場合に手段としては、こういう方法もありかな? [ソース] #include <initializer_list> #include <iostream> template<typename T> void disp(std::initializer_list<T> t){ for(auto n : t){ std::cout << n << std::endl; } } int main(){ disp({1, 2, 3}); disp({"hoge", "foo", "piy</t></typename></iostream></initializer_list>…

Variadic Templates 引数を range-based for でループさせる

C++

同じ型であればこれで問題ないかな。 [ソース] #include <iostream> template<typename... Args> void disp(Args... args){ for(auto n : { args... }){ std::cout << n << std::endl; } } int main(){ disp(1, 2, 3); disp("hoge", "foo", "piyo"); // 型が違うので NG // disp("hoge", </typename...></iostream>…

Variadic Templates 引数を受け取る for_each 関数

C++

ガシガシ書いてみた。 [ソース] #include <iostream> #include <tuple> template<typename F, typename T, typename ...Args> void for_each_impl(F func, T&& t, Args&&... args){ func(t); for_each_impl(func, args...); } template<typename F> void for_each_impl(F, F){} template<typename ...Args> void for_each(Args&&... args…</typename></typename></typename></tuple></iostream>

Variadic Templates を使用した可変長引数の各要素を取得する

C++

C++ の標準ライブラリだけでやろうとすると std::tuple を使用するのがベターなんですかね。 可変長テンプレート引数以外で Variadic Templates を使ったことがなかったので覚書。 [ソース] #include <tuple> template<int Index, typename ...Args> typename std::tuple_element<Index, std::tuple<Args...>>::type at_c(Arg</index,></int></tuple>…

Windows で ghc-mod の導入

無駄に苦労したので覚え書き。 導入した後に思い出しながら書いているので間違っている部分があるかも…。 1.ghc のインストール ここから ghc の最新版を落としてきます。 (記事を書いている時は 7.2.1) 2.cabal.exe を落としてくる ここから cabal.exe …

quickrun.vim の outputter/location_list

vim

ちょっと欲しかったので書いてみました。 と、いってもほとんど outputter/quickfix のコピペなんですが。 [location_list] " location-list let s:location_list_outputter = quickrun#outputter#buffered#new() let s:location_list_outputter.config = { …

constexpr な lambda

気がついたら出来ていました。 元々は constexpr 関数内で lambda を使いたかったので、式から型を定義するよな処理を書いていたんですが…。 まだ荒削りですが現状はこんな感じ。 [ソース] #include <cstddef> #include <tuple> #include <utility> namespace half{ template<std::size_t N> struct p</std::size_t></utility></tuple></cstddef>…

constexpr な strtol 関数を書いた

書きました。 constexpr だと代入が出来ないので、第二引数が NULL、もしくは引数が文字列と基数の場合のみ constexpr な値を返します。 [ソース] #include <cstdlib> #include <climits> namespace ce{ // 暫定版 // 英字の連続性は保証されていないので、ぐぬぬ。 template<typename Char> c</typename></climits></cstdlib>…

vim script で eval

vim script では eval 関数を使用して script の評価を行う事ができます。 [ソース] function! s:lambda(expr) let self = {} let self.expr = a:expr function! self.apply(...) return eval(self.expr) endfunction return self endfunction function! s:m…

vim script でカリー化

ふと、思いついたので書いてみた。 [ソース] function! s:plus1(b) return 1 + a:b endfunction function! s:plus2(b) return 2 + a:b endfunction function! s:plus3(b) return 3 + a:b endfunction function! s:plus(a, b) return a:a + a:b endfunction f…

vim script で、Boost.Optional のような処理

前回作ったクラスの処理で Boost.Optional のような処理をやろうとすると、どんな感じになるのか試してみました。 Boost.Optional についてはここら辺を参照して下さい。 不正な値が含まれる場合に使用したりします。 [ソース] function! s:optional(...) le…

Vim の compiler

runtime/compiler ディレクトリ内に各コンパイラの vim script があるんですが、ここに各コンパイラの errorformat とかが記述されていました。 SingleCompile とかは、これを使用してコンパイラの設定なんかを切り替えているみたいですね。 存在すら知らな…

Vim で静的に C++ のシンタックスチェックを行う

vim

[概要] イメージとしては、Visual Studio 2010 で行われている静的なシンタックスチェックです。これと似たような事を Vim で行います。 [Vimプラグイン] quickrun.vim 非同期でシンタックスチェック quickfixstatus quickfix の該当箇所をコマンドラインに…

vim script でクラスの定義 その2

色々と考えた結果こんな感じになりました。 [ソース] let g:type = accel#type#type() function! s:eval(class, expr, ...) let self = a:class if type(a:expr) == type(function("tr")) return call(a:expr, a:000, a:class) else return eval(a:expr) end…

vimfiler でアクションを起動

vim

window.twttr = (function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0], t = window.twttr || {}; if (d.getElementById(id)) return t; js = d.createElement(s); js.id = id; js.src = "https://platform.twitter.com/widgets.js"; fjs.paren…

複数条件での enable_if その2

C++

元記事:危ないRiSKのブログ - オーバーロードに優先順位を付ける なんと、こんなやり方が…!! ってことで、思わず自分でも書いてみました。 まぁやっている事は元記事の丸パクリなんですがががが。 [ソース] #include <boost/type_traits/is_same.hpp> #include <boost/type_traits/is_integral.hpp> #include <boost/utility/enable_if.hpp> #include <iostream> temp</iostream></boost/utility/enable_if.hpp></boost/type_traits/is_integral.hpp></boost/type_traits/is_same.hpp>…

リストのアンパック

vim script では、リストの要素を個別に取得する事が出来ます。 [ソース] function! s:add_sub(a, b) return [a:a + a:b, a:a - a:b] endfunction function! s:main() let list = [1, 2, 3] let [var1, var2, var3] = list echo var1 echo var2 echo var3 ec…

eval と join を使ったリストの要素の合計を計算

と、ぱっと思いつきで書いてみたもののすでに組み込み関数で似たようなものが用意されていたような…。 [ソース] function! s:sum(list) return eval(join(a:list, "+")) endfunction function! s:main() echo s:sum([1, 2, 3]) echo s:sum(range(1, 10)) end…

vim script で、関数のオーバーロードっぽい定義

vim script では、次のように {} 内を評価して変数名を定義することが出来ます。 let s:hoge = "foo" let s:foo{s:hoge} = "foofoo" echo s:foo{s:hoge} " => foofoo echo s:foofoo " => foofoo これは変数名だけではなく、関数名にも適用することが出来ます…

SingleCompile 2.8.9 から、msvc のコンパイラバージョンが選択出るようになった

vim.org:http://www.vim.org/scripts/script.php?script_id=3115 msvc 2008 や msvc 2010 といった単位で選択できるようになりました。 C++03 のみで開発する場合は、msvc 2008 とかを選択すれば問題ないんじゃないでしょうか。 これは quickrun.vim でもや…

vim script で、ユニークな番号の生成

適当に書いてみました。 そんな実装で大丈夫か? 大丈夫だ、多分問題ない。 [ソース] function! s:uuid() let self = {} function! self.uuid() endfunction return self.uuid endfunction function! s:main() echo s:uuid() echo s:uuid() echo s:uuid() ec…

constexpr を使用したベクトル演算を簡単に書いてみた

ベクトル型同士の演算しか出来ませんが、簡単に書いてみました。 [ソース] #include <iostream> template<typename T> struct vec3{ typedef T value_type; static int const dimension = 3; union{ struct{ value_type x, y, z; }; value_type array[dimension]; }; }; template<typename T> c</typename></typename></iostream>…

Visual Studio で libclang.dll のデバッグ環境 その2

前回の続きです。 前回は、すでに libclang.dll をロードしているプロセスに対してアタッチしましたが、次は Visual Studio 上からプロセスを起動してデバッグしてみたいと思います。 今回は、Visual Studio から Python を起動して、libclang の Pythonモジ…

Visual Stduio で libclang.dll のデバッグ環境

今後の事を考えるとあった方が便利かなー、と思い用意しました。 libclang.dll というか、dll のデバッグ環境ですね。 Visual Studio 上で libclang.dll のステップ実行とかを行います。 ※以下 llvm のビルドが出来ること前提です。 [必要なもの] Visual Stu…

vim script のリストをフォーマットを指定して出力

ふと、思い立って書いてみた。 [ソース] function! s:pop_back(list) return a:list[ : len(a:list)-2 ] endfunction function! s:back(list) return remove(a:list, -1) endfunction function! s:eval_indent_format(format, indent_space, value) let resu…

unite.vim で定義されているキーマッピングを出力する

vim

関連:vim-users - Hack #203: 定義されているマッピングを調べる unite.vim の output-source を使用して、定義されているキーマッピングを出力します。 [プラグイン] unite.vim [コマンド] :Unite output:map|map!|lmap [SS] unite-output では、Vimコマン…

最近読んだ Vim 系の記事まとめ

vim

どちらかといえば、初心者向け?の記事のまとめです。 あまりこういうのは控えてなかったので少ないですが…。 とりあえず、サッとまとめただけなので、探せばもっとあると思います。 luluciの - Vim/異端/環境設定 (1) luluciの - Vim/異端/環境設定 (2) Ide…

clang のコマンドラインオプションを渡す

Index.parse の引数にコマンドラインオプションを配列で渡すことが出来ます。 [main.py] import sys import clang.cindex target = "main.cpp" command = ["-ID:/boost/boost_1_47_0", "-Wall", "-std=C++0x"] index = clang.cindex.Index.create() tree = i…