右上➚

プログラミングに関するメモをのこしていきます

C++

値と参照について

「値」と「参照」という言葉があります。 このへんの言葉について、今の理解をまとめておこうと思います。 言葉の定義や理解が誤っている部分があればご指摘ください。 まず、前提として以下では、「値」ベースの言語として C, C++, Rust などを、「参照」ベ…

再帰的 grep ツール crepe を作っています

C++

再帰的にパスをたどりながらパターンにマッチする行を検索する grep 系のツールを作っています。 agatan/crepe 有名どころとしては、ack とか ggreer/the_silver_searcher(ag) とか monochromegane/the_platinum_searcher とか tkengo/highway なんかがあり…

C++ で result 型を作る

Haskell や Rust など多くの強力な型システムを持つプログラミング言語は、Either とか Result といった「失敗するかもしれない」計算の値を示す型を持っています。 現在の C++ の標準ライブラリにはこのような型はありませんので、それを自作してみようとい…

C++テンプレートイディオム CRTP

C++テンプレートの有名なイディオムとして、CRTPというものがあります。 今回はそれについて。 複雑な部分特殊化みたいな話もないですし、メリットもわかりやすい良いイディオムだと思うので、ちょっとまとめておきます。 (Control キーのことをよく CTRL と…

C++ のテンプレートの実装

C++ のテンプレートがなぜ必要で,どんな構文・種類のものがあるかについては前回までにまとめました。 というわけで次は C++ ではテンプレートという機能を使用するとどんなバイナリが生成されるのかについて見ていきます。 C++ のテンプレートの強力さとか…

C++ テンプレートの種類と構文

C++

前回テンプレートがなぜ必要なのかについて簡単にまとめたので、今回はその構文や種類についてまとめたいと思います。 agtn.hatenablog.com アウトライン テンプレートの種類と構文 定義する 使用する(インスタンス化) クラステンプレート 関数テンプレート …

C++ : なぜテンプレートが必要なのか

C++

こんにちは。 ちょっと C++ への熱を冷まさないために、C++ のテンプレートについてまとめてみたいと思います。 対象 C++ のテンプレートが怖い人 C++ のコンパイルエラーメッセージが怖い人 C++ の規格とブログポストを比較して誤りを探したい人(もし誤って…

C++ でパーサコンビネータを書きました

C++ で構文解析といえば,Boost.Spirit や yacc系などが有名ですが,どうにも使うの辛かったので作りました. 2016/05/01 追記 いろいろ更新しました.肯定先読み以外はプリミティブも実装し終わっているかと思います. ドキュメントはまだ無いのですが,す…

C++ の複雑な型を整形するプログラムを作りました

C++

テンプレートをバリバリ使っている C++ プログラムのコンパイルエラーが,死ぬほど辛かったので作りました. 型を綺麗に出力するだけです. C++の型版 jq みたいなやつありそうだけど無いのかな? agatan/tf たとえば, boost::spirit::x3::raw_directive

Type Erasure による Visitor パターンの実装

プログラミングしていて,木構造をうまく扱いたいという状況は結構良くあると思います. 代数的データ型とパターンマッチを持つ言語であればとても美しく完結に表現できる木構造ですが,オブジェクト指向言語でやろうと思うと結構たいへんです. 典型的には …

#include をソートするVimプラグインを作りました

Haskellでimport文をソートするプラグイン vim-haskell-sort-import を作りました - プログラムモグモグという記事を拝見して,コードを見たらすごくわかりやすくて,これの C/C++ 版がほしいと思い,書いてみました. vim script はほとんど書いたことがな…

Boost.Spirit.X3 で簡易電卓を実装 1

agtn.hatenablog.com agtn.hatenablog.com 引き続き,Boost.Spirit.X3 です. 今回は,前回までの知識をつかって,簡易電卓を実装してみます. 仕様 今回定義する電卓は, + - * / の 4 つの演算と単項の - をサポートします. また,整数型のみを扱うものと…

Boost.Spirit.X3 の練習 2

Boost.Spirit.X3 の練習1 - プログラミングのメモ帳➚に引き続き,Boost.Spirit.X3 のお勉強メモです. セマンティックアクション 構文解析にはセマンティックアクションというのがつきものです. yacc や parsec など有名な構文解析のためのツール/ライブラ…

Boost.Spirit.X3 の練習1

Boost.Spirit.X3 の練習1 Boost.Spirit.X3 という C++ のための パーサコンビネータライブラリを使ってみています. Boost.Spirit というと, C++ の黒魔術の塊みたいなイメージがあります. ちなみに Boost.Spirit.Qi が安定版のパーサコンビネータライブラ…