C++と色々

主にC++やプログラムに関する記事を投稿します。

MinGWのg++でgtestをビルドする

前提条件(私が成功した時の環境) MinGWがインストールされていること MinGWのgcc, g++などがcmdにパスが通っていること cmakeがインストールされていること、cmdにパスが通っていること python2.7がインストールされていること、cmdにパスが通っていること …

Windows8.1で日本語ユーザフォルダを英語に直す

Windows8.1でローカルアカウント作成時に、ダイアログに促されるままMSアカウントと連携すると、ユーザフォルダ名がMSアカウントの名前になります。 大抵MSアカウント名は日本語で登録しているので、フォルダ名も日本語になってしまいます。 わざわざ説明す…

for_each_argument 前半

C++

こちらの動画 www.youtube.com で紹介されているイディオムを自分なりに解釈を加えてまとめてみようと思います。長いので前半後半に分割する予定です。 for_each_argument C++14から入った、ジェネリックラムダを用いて、色々な型の変数を走査するfor_eachを…

Windowsで多少マシなターミナル環境

Windowsでcmdよりは多少マシなターミナル環境を整えました。今使ってるPCが壊れた時にそれを復元できるように自分向けに構築手順をまとめます。 注意 レジストリを操作します。ここに書かれたレジストリの操作を真似した結果あなたのPCがおかしくなっても責…

Visual C++でNuGetで簡単にboostインストール

注意 Visual Studio 2015 RCで動作を確認しました。他のVSでは確認していません。 Visual C++プロジェクトで右クリックをして、「NuGetパッケージの管理」をクリックします。 検索フォームにboostと入力します。少し待つと検索結果が出てくるので、画面右に…

GWの日記

4月24日夜、私物ノートPCが死ぬ 29日、ノートPC入院する 5月1日、友人とゲーセンとカラオケで遊ぶ 2日、友人とドミニオンで遊ぶ 3日、友人と飲み会をする 4日、友人とプロ野球観戦に行く 5日、友人とゲーセンとカラオケで遊ぶ 6日、友人と映画鑑賞に行く プ…

Aggregates 集成体

C++

以下staticデータメンバと明示しない限り、非staticデータメンバを単にデータメンバと表現します。 Aggregates とは Aggregates(以下、集成体)は配列と、以下の条件を満たしたクラスです。 ユーザ定義のコンストラクタ(コピー、ムーブ含む)が無いこと。つま…

CLionでDXライブラリを動かす

前提としてWindowsOSであり、CLionとMinGWはインストール済みとします。(cmakeはCLionインストール時に一緒に入ります) 私の環境は Windows 8.1 CLion 1.0 MinGW 不明 g++は4.8.1でした DxLib 3.13d でした。CLionは www.jetbrains.com から落とせます。MinG…

インデックスアクセス可能なシーケンスの各要素にindex_sequenceを用いて戻り値voidな関数を適用する

C++

素敵なタイトルが思いつきませんでした。 結論 以下のリンクに書いてある内容について触れています c++ - Pretty-print std::tuple - Stack Overflow c++ - Iterating on a tuple... again - Stack Overflow c++ - What does this variadic template code do…

初期化キャプチャでは可変長引数テンプレートはキャプチャできない

C++

初期化キャプチャ(init-capture)で、可変長引数テンプレート(variadic templates)をキャプチャしようと思って調べてのですが、できないようです。キャプチャデフォルト(capture-default)と単純キャプチャ(simple-capture)でキャプチャすることは出来ます。 …

boost::fusion::vectorで異なる型のコンテナ

動的な多態性を持った型のオブジェクトをコンテナで扱いたい場合、基本クラスの参照型または基本クラスのポインタ型のコンテナを使うことができます: #include <iostream> #include <memory> #include <vector> struct A { void disp() const { do_disp(); } private: virtual void do_</vector></memory></iostream>…

部分適用された関数

C++

ScalaにかこつけたC++の紹介 Scalaには部分適用された関数というものがあります。Scalaでは必要な引数を渡して関数を呼び出すことを、関数を引数に適用する(apply)と表現します。例えば: def sum(a: Int, b: Int, c: Int) = a + b + c という関数があったと…

C++にこんな変数宣言があればいいのに

C++

前置き 最近Scalaを勉強しています。Scala勉強している時に、変数宣言周りでC++でもこう書けたらいいなと思うことが2つあったので晒してみます。 変数宣言・定義時の型の後置 関数の戻り値の型が後置できるのだから、変数の型も後置で来てもいいじゃないか、…

2014年下半期に読んだ技術書

下半期は思ったより読めませんでした。 8月 EFFECTIVE JAVA 第2版 (The Java Series)作者: Joshua Bloch,柴田芳樹出版社/メーカー: 丸善出版発売日: 2014/03/11メディア: 単行本(ソフトカバー)この商品を含むブログ (5件) を見る 仕事でjavaを触っているの…

WindowsでOpenSSLのビルドする時にハマったこと

cpp-netlibを使いたいために、opensslをビルドした時にハマったことがあるのでメモ。 おおよそ http://c-crad.wktk.so/td/?p=159 に書いてある通りで問題ないのですが、自分は既にMinGWがインストールされておりC:\MinGW\bin\perl.exeのパスが通っていたため…

Bootstrap触ってみた

公式からjs、css、imgが入ったzipをダウンロードし、公式のサンプルコードをコピペしたが、正しく表示されなかった(もちろん、css等のパスは直した) Bootstrap触ってみた系のブログが、公式のサンプルと若干異なる書き方をしていたため、そちらを移して書い…

Visual C++ 2013のis_trivially_destructibleがバグっている

以下のコードがコンパイル通りません #include <type_traits> struct no { ~no() {} }; static_assert(!std::is_trivially_destructible<no[1]>::value, ""); int main() {} ちなみにVS2015PRでは直っていました</no[1]></type_traits>

Visual C++ 2015 PreviewのC++11/14/1zの新機能

Visual C++ 12.0 CTPと比べて新しく対応したC++11/14/1zの新規の機能を紹介します。 コア言語 Terse range-based for 訳すなら簡便な範囲for文、って感じでしょうか? C++14の次の規格で提案されている機能で、正式に入ることは決定していませんが、ほぼ入る…

VC++2015PRでURIエンコード

Visual C++ 2015でC++1zで提案されているTerse range-based for loopsと、C++11のUnicodeリテラルが入ったので使ってみました。 #include <algorithm> #include <iomanip> #include <sstream> #include <string> namespace { std::string const unreserved_chars = "abcdefghijklmnopqrstuvwxyzABC</string></sstream></iomanip></algorithm>…

最低限の機能のアーカイバ書いてみた

C++

コード書くのに疲れたのでコードの説明は割愛。正直コメントや説明ないと読むの辛いと思います… やってること自体はセガ本(ゲームプログラマになる前に覚えておきたい技術)の最もシンプルなアーカイバと同じです。 ディレクトリの再帰構造に対応していません…

C++でProducer-Consumerパターン書いてみた

↓この本の第5章 Producer-ConsumerパターンをC++で書いてみた。 増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編作者: 結城浩出版社/メーカー: ソフトバンククリエイティブ発売日: 2006/03/21メディア: 大型本購入: 15人 クリック: 287回こ…

Visual C++ 2013 CTPのオーバーロード解決がバグっている

これで3~4時間詰まった… 以下のコードがコンパイルエラーになる #include <initializer_list> void f(int) {} void f(std::initializer_list<int>) {} int main() { f({10}); } /* 1> prog.cpp 1>prog.cpp(7): error C2668: 'f' : ambiguous call to overloaded function 1> prog.c</int></initializer_list>…

標準ライブラリを積極的に使おう

長文書くのとても面倒くさいので、要点だけ。 結論 あなたがメインで使っている言語に標準ライブラリが存在するなら、標準ライブラリに親しみ積極的に標準ライブラリを使おう! 暇な時に15分ぐらいリファレンスサイトを眺める癖をつけよう。 要点 標準ライ…

2014年上半期に読んだ技術書

本当は年末に書きたかった記事でしたが、冊数が多くなりそうなので分けました。 1-3月 卒論と就活に精神を追い詰められ、それらから開放されて最後の春休み遊んでいた時期なのでほとんど読んでません。1冊だけ2ヶ月書けてとてもだらだら読みました。 テスト…

ドワンゴC++勉強会 #1に参加してきました

C++

書くのがかなり遅くなってしまいました… 6/28にドワンゴでC++の勉強会があり、参加してきました。 メタプログラミングに関する発表が多く、だいぶニッチな内容だったと思います。 constexpr関数はコンパイル時処理。これはいい。実行時が霞んで見える。CPUの…

C++ Testing Framework Catchの紹介

C++

CatchとはC++のテスティングレームワークの1つです。ヘッダオンリーで使うことが出来ます!簡単! https://github.com/philsquared/Catch 私はこちらのブログを拝見して知りました。 ブログズミ: C++ Testing Framework の Catch を使ってみた Google Testな…

選択ソート書いてみた

普通のと、デバッグ用ストリーム出力ありのやつ #include <algorithm> #include <iterator> #include <functional> #include <utility> template <typename Iterator> void selection_sort(Iterator first, Iterator last) { selection_sort(first, last, std::less<>{}); } template <typename Iterator, typename Compare> void selection_sort(…</typename></typename></utility></functional></iterator></algorithm>

バブルソート書いてみた

普通のと、デバッグ表示用の2種類 #include <algorithm> #include <iterator> #include <functional> #include <utility> template <typename Iterator> void bubble_sort(Iterator first, Iterator last) { bubble_sort(first, last, std::less<>{}); } template <typename Iterator, typename Compare> void bubble_sort(Iterator first,…</typename></typename></utility></functional></iterator></algorithm>

型名と変数名

C++ではユーザ定義型と同名の変数を作ることが出来ます。型名か変数名か曖昧な文では変数と解釈されます。型名を表したい時は型名の前にclassもしくはstructをつけます。 class hoge {}; int main() { hoge hoge; // 型名と同じ名前の変数を作って良い hoge;…

テンプレートテンプレートパラメータにtypenameキーワードを使えるようにする

C++

N4051 Allow typename in a template template parameter 今のC++ではテンプレートテンプレートパラメータにはclassキーワードしか使えません。 template <template <typename> class T> // OK struct A; template <template <typename> typename T> // NG struct B; この制限を無くして、typenameキ</template></template>…