無名構造体を名前付き tuple として使う

C++

例えばユーザ名,Eメール,IDの3つの値を一気に返したいとき,C++ では std::tuple が使えます. #include <string> #include <tuple> using std::operator""s; auto get_user() { // std::tuple<std::string, std::string, int> return std::make_tuple("Linda"s, "foo@bar.com"s, 17); // name, email, id</std::string,></tuple></string>…

可変長のパラメータパックのまま扱うのがだるい時は tuple で扱うのどうだろう

C++

C++11 から入った可変長テンプレート引数,便利ですがパラメータパックの扱いがとっつきにくいです. 下記のように一旦 tuple で受ければその後は std::tuple のインターフェースで受けて自由にできるので 良いんじゃないかという気がする. template<class... Args> void d</class...>…

今年気になった C++ ライブラリとかフレームワークを紹介する記事

C++

この記事は C++ Advent Calendar 2014 の17日目の記事です.前日は @yutopp さんの Boost.Spirit.X3のご紹介 - C++ Advent Calendar 2014(16日目) でした. 最近 Boost.Spirit と LLVM で言語をちまちまと書いているので,Boost.Spirit と LLVM で言語つくる…

Software Design で「犬でも分かる!? Vim 導入&カスタマイズの超基本」という記事を書きました

Vim

発売は少し先ですが,12月18日発売予定の Software Design 2015年1月号で「犬でも分かる!? Vim 導入&カスタマイズの超基本」という記事を書きました. Software Design 2015年1月号 Software Design (ソフトウェア デザイン) 2015年 01月号 [雑誌]出版社/メ…

犬製 Vim プラグイン紹介3本立て

Vim

この記事は Vim Advent Calendar 2014 の8日目の記事です.昨日に引き続き犬アイコンがお送りします.昨日は daisuzu さんの vital-smtpを作った でした. 今回は今年つくったプラグインとか,過去につくったけれど紹介していなかったプラグインを3つ紹介し…

VimConf 2014 に参加(&発表)してきた

Vim

VimConf 2014 に参加してきた.忘れないうちに各発表の感想書いとこうと思う. 発表スライドはこちらに随時まとめられていくらしい. Identity of the Vim (@kaoriyaさん) 香り屋さんの基調講演的なポジションのエモい発表だった. Vim を発展させていく動き…

NeoVim の job control API メモ

次世代の Vim をコミュニティベースで開発していくプロジェクトとして発足した NeoVim について,あまりキャッチアップできていなかったので少し試してみたメモ. インストール make deps で依存しているライブラリのビルド cmake でビルド用 Makefile 生成 …

clever-f.vim 1.4 をリリースしました.

Vim

clever-f.vim は Vim の 1文字検索カーソル移動 f, F, t, T を拡張するプラグインです.Vim では f, F, t, T に加え,繰り返しのために , や ; も必要で,<Leader> などで潰されがちでしたが,clever-f.vim では f などが状態を持つことで , や ; を不要にし,Vim の</leader>…

momonga.vim #5 でコミットバッファ編集プラグイン committia.vim を完成させた

Vim

先週の土曜日に武蔵野プレイスで開催された Vim 関連のもくもく会イベント,momonga.vim #5 に参加してきました. 明日が momonga.vim #6 なのでギリギリ間に合ったと思います. コミットバッファ用プラグイン committia.vim つくった 今回は,以前 TokyoVim…

vim-go-impl つくった

impl という Go のコマンドラインツールがあります. レシーバとそのレシーバが実装するインターフェースを引数に渡すと,実装しないといけない関数のひな形を自動生成してくれます. 便利そうだったので,とりあえず Vim から使う用に vim-go-impl というプ…

C++ の web フレームワーク crow のコンパイル時処理

C++

最近,C++ の crow という薄いウェブフレームワークが出ました.特に要件は書いていないですが,C++11 以上が必須のモダンな設計で Python の Flask のような雰囲気で書けるのが売りらしいです. ipkn/crow CROW_ROUTE(app,"/hello/<int>") ([](int count){ if (c</int>…

2048 の AI を読んでみた

以前第一回2048AIコンテスト 結果報告という記事を見かけて,興味がわいたので 2048 の AI について調べてみました. 2048 は 4x4 のパズルゲームで,ルールは実際にやってもらったほうが分かりやすいぐらい簡単なものですが,テンポが良くて結構ハマりまし…

boost::variant の visitor にラムダ式を使う

boost::variant は複数の方を入れられる型安全な union のようなコンテナで,次のように visitor パターンを使ってアクセスできます. Boost逆引きリファレンス > ユーザー定義型を扱える型安全な共用体 ですが,ちょっとした要素アクセスのために毎度 visit…

yokohama.vim #5 でした

Vim

4/6 に @gu4 さん 主催の yokohama.vim #5 に参加してきた. 何も考えず速攻で登録して身内感を出してしまったので人集まるかなぁと思っていたけれど,thinca さんの呼びかけにより参加者が増えてほっとした.thinca さんの人望(もとい魚望?)さすがでした…

Uniform initialization で困るパターン(std::string)

C++

C++11 で,() でなく {} で初期化する統一初期化(Uniform initialization)が入った.普段はこれを使っているけれど,この間これで std::string でハマったのでメモ. std::string のコンストラクタの中には,char 型の値を一定回数繰り返すコンストラクタ…

僕は小数点数のパースがやりたかった

Boost.Spirit.Qi で定数リテラルのパースを行う処理を書くときに,小数点数と整数のパースでちょっと詰まった. qi::double_ | qi::int_ とすると 42 などの整数値も double 型でパースされてしまうし, qi::int_ | qi::double_ とすると,3.14 などの小数点…

'auto' 宣言の型を調べるプラグイン作った powered by momonga.vim #2.2

2/1 から 2/2 にかけて開催された @supermomonga さん主催の momonga.vim 2.2 に参加しました. 少人数でぐだぐだ雑談しながら作業する感じの会です. clang-type-inspector.vim つくった C++11 から auto を指定することで変数宣言の型を推論させることがで…

ジェネリックラムダをもっと手軽に書くためのマクロ

C++

ラムダのキャプチャは無くてはならないものだけれど,たいていの場合は [&] とかで済んでしまう.また,引数の型もジェネリックラムダの登場で,だいたい auto で済んでしまうようになったので,こんな感じで書けると良いなぁと思うようになった. std::vect…

C++14 の変数テンプレートで ::value を省く

C++

C++11 で template alias が入ったことにより,テンプレートメタプログラミングでよく出てくる,メタ関数を評価するための typename ::type を省略して直接型を取得するようなエイリアスが書けるようになりました. template<bool B, class T> using enable_if_ = typename st</bool>…

同じ CXString に複数回 clang_getCString() を適用してはいけない…?

CXString は libclang での文字列型で,C の文字列に直すには clang_getCString() を使う. CXString s = clang_getCursorSpelling(cursor); char const* p = clang_getCString(s); しかし,どうやら複数回 clang_getCString() を適用すると1回目と2回目では…

クラススコープの変数テンプレート

C++

クラススコープでは,変数テンプレートは静的なメンバ変数でしか使えない. struct X { // OK template<class T> static T hoge = T{}; // NG template<class T> T huga = T{}; }; なので,オブジェクトごとにメンバ変数テンプレートを持つということはできない. 少なくとも現</class></class>…

codic-vim 用の unite.vim ソースを書いた

Vim

codic-vim-with-unite は deprecated になりました.unite-codic.vim に移行をお願いします. ソフトウェア開発者用の辞書サービス Codic の辞書を Vim から使える codic-vim が公開されました. 日本語で単語を指定すると,それに近い英単語を一覧で出して…

Boost.Variant が特定の型の値を保持していた時だけ処理を実行する

boost::variant が保持している値の型が特定の型の場合だけ○○するという処理が多いの,でラムダ式で処理を書けるようにした. apply<{期待する variant が保持する値の型}>({variant な変数}, {適用したい関数}) という感じに使う. #include <boost/variant/variant.hpp> #include <iostream> int</iostream></boost/variant/variant.hpp>…

Boost.Variant に型指定でアクセスしたい

boost::variant の要素にアクセスする場合,which() メンバ関数で boost::variant が保持している値の型を見てからアクセスするか static_visitor でアクセスするかの二択が普通だと思うけれど,「which() でアクセスするのはマジックナンバー増えるから嫌」…

boost::variant の型パラメータ数制限をオーバーした時の対処

boost::variant はテンプレートに書ける型の数がデフォルトで 20 に制限されている.この値は variant_fwd.hpp に定義されている BOOST_VARIANT_LIMIT_TYPES マクロで確認できる. 今回は制限の 20 を超える数の型を boost::variant に指定したくなったので…

2013年に書いた Vim プラグインその他まとめ

今年書いた Vim プラグインその他をリストアップしてみた. Vim プラグイン clever-split.vim 現在のウィンドウの縦幅や横幅,開くバッファの最大の桁数などを考慮して縦分割・横分割・新規タブの中から開き方を賢く選択肢てくれるプラグイン conflict-marke…

Boost.MPL で条件の分岐先の評価を遅延したい

Boost.MPL でテンプレートの評価を遅延するやり方が分かっていなかったので調べてみたメモ. 具体例で書く. ある正数からその正数以下の連番文字列を作り出すメタ関数を考える.例えば,5 を入力すると "12345" が得られるものとする.面倒くさいので,入力…

Boost.Spirit.Qi と Boost.Variant で簡単な電卓つくった

Boost.Spirit.Qi は今まで parse() とか phrase_parse() に直接パーサを渡すだけで簡単にパースできる場合にしか使っていなかったので,真面目に文法を定義してパースしてみた. 作ったのは,四則演算と括弧と対数関数と指数関数が使える簡単な電卓. Boost.…

Travis CI で最新の Clang (3.5) を使ってテストする

Travis CI は Github アカウントと連携してリポジトリに .travis.yml というファイルを置くことで Github に push したときに自動でテストを回して CI してくれるサービス. Travis で使われている Ubuntu 12.04 に入っているコンパイラは gcc 4.6 と clang …

(進捗あります!✧\\٩(‘ω’)و //✧)o 。('、3)_ヽ)_

この記事は 進捗 Advent Calendar の 13 日目の記事となります. 年も暮れて1年の振り返りをする時期になってきたので,今年を振り返るのも兼ねて参加してみました. 進捗どうですか? → Vim 今年は Vim のプラグインをたくさん書いた気がします.ざっと数え…