C++と色々

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

CentOS 6でgitを2.2.0に更新した

ハマったので記録します。 $ cat /etc/redhat-release CentOS release 6.5 (Final) な環境で、 yum install(update) git をしても1.7.1しか入りませんでした。gitのバージョンが古いことでgit cloneなどが一部使えなくなったためgitを更新することにしました…

Visual C++ 15.6 で並列 for_each

Visual Studio 2017の15.6からC++17から入るParallel Algorithmsが部分的に実装されました。 以下の並列for_eachコードが動きようになります。 #include <algorithm> #include <execution> #include <iostream> #include <vector> int main() { // サイズ10のvectorを作って0, 1, 2, ..., 9で埋める s</vector></iostream></execution></algorithm>…

std::bindとstd::mem_fnはデータメンバも束縛できる

C++

知らなかった。std::bindとstd::mem_fnはデータメンバを束縛して関数風にアクセスすることが出来ます。もちろんそのスコープでアクセス可能なデータメンバに限ります。 #include <functional> #include <iostream> struct X { int data = 3; }; int main() { X x; auto x1 = std::b</iostream></functional>…

DxLibとRxCppを合わせてみた

C++

DxLibでゲームを作るときに、様々なイベントをRxのStreamとして設計できないか気になり試してみました。 UniRxなどあるように、ゲーム開発自体でRxを使うことは実績がありますね。 サンプルコードはZキーの入力をObservableとしてSubscribeするプログラムに…

Visual Studio 2017と Bash on Windows を使ってC++に提案中のコンセプトを試す

この記事の内容はVisual C++公式ブログと同様になります。 Learn C++ Concepts with Visual Studio and the WSL | Visual C++ Team Blog 基本はVisual C++公式ブログ通りに行えばよいのですが、VS上でのremote buildの方法が別の記事になっていたり、bash側…

Visual Studio 2017でファイルのエンコードを指定して保存する方法

Visual Studio 2015までは ファイル(F) -> 保存オプションの詳細設定(V) という項目で現在のファイルのエンコーディングを指定して保存できました(画像はVisual Studio 2015)。 ところが、Visual Studio 2017では保存オプションの詳細設定が削除されました。…

ダクソシリーズの感想

文章で書くの大変なので箇条書きで手を抜きます。 各作品が他2作品と比べて良く感じたところと悪く感じたところを書きます。なのでシリーズ全体の良く感じたところと悪く感じた所はここでは触れられていません。 ダクソ 良いところ ステージと繋がり方の面白…

Visual C++における文字コード変換

前提環境 日本語版WindowsかつVisual C++の環境の話です*1。Windows以外のOSや非日本語のWindows、Visual C++以外のコンパイラは当てはまりません。 用語 ここでは char const* の文字列や char の文字 std::string で表現されるマルチバイト文字(列)をまと…

std::variant

C++

C++17にはstd::variantというライブラリが追加されます。 variantは組み込みのunionよりリッチなインターフェイスを持った型安全なunionです。*1 Visual Studio 2017にも入りましたので簡単なサンプルを書いてみました #include <variant> #include <iostream> #include <string> struct</string></iostream></variant>…

std::error_code, std::error_category, std::error_conditionの違い

C++

概要 C++11で <system_error> ヘッダが追加され、その中に3つのクラス std::error_code std::error_category std::error_condition が追加されました。自分はこの3つクラスの違いがわからなかったので調べてまとめてみました。ソースは https://www.amazon.co.jp/dp/479737</system_error>…

出力するスタティックライブラリのファイル名、ディレクトリを変える

d.hatena.ne.jp

bash on windowsでruby on rails動かしてみた

rbenv, bundler, railsをインストールしてlocalhost:3000でアクセスできるようになるところまで はじめに、bash自体の初期設定を以下の記事を参考に行います qiita.com apt-getで必要なパッケージを入れます。libssl-dev libffi-dev libreadline-dev makeはr…

C++ Testing Framework banditの紹介

C++

github.com 概要 banditはC++11以降を前提としたC++のユニットテストのフレームワークです。 Human Friendlyらしいです。MITライセンスです。 導入 Releases · joakimkarlsson/bandit · GitHub からzipかtar.gzでダウンロードするか git cloneして使うと良い…

Asioで非同期Http通信

C++

Boost.Asioから切り離したAsioライブラリがあります。 asio C++ library 名前空間が違うぐらいでほとんどBoost.Asioと同じように使えます。Boost.AsioがBoost.SystemErrorやBoost.DateTimeに依存しているのに対し、独立して動くという点が嬉しいです。 試し…

コンパイル時ズンドコキヨシ

C++

ズンドコキヨシ with C++14 - C++と色々 の続きです。コンパイル時にズンドコキヨシをやってみました。 static_assert で、ちゃんとシーケンスの最後の5つがズンズンズンズンドコになっているかを検証しています。Sprout.RandomとBoost.MPLを使用しています…

ズンドコキヨシ with C++14

C++

これ qiita.com なぜかC++版が無かったので。コードゴルフとかやらずに、ファンクタとイテレータで実装してみた。C++11では古くて動きません #include <algorithm> #include <array> #include <iostream> #include <iterator> #include <random> #include <string> #include <utility> struct zundoko_generator { static con</utility></string></random></iterator></iostream></array></algorithm>…

C++でP2Pプログラム書いてみたかった

ユーザにお互いにグローバルIPを教え合うという操作をさせずにP2P通信ってどうやるんだろうと思い、調べました。 STUNサーバやTURNサーバと通信を行い、自身のグローバルIPを取得する、ということを知りました。 それらのサーバと通信を行うライブラリを調べ…

型とオブジェクトと値と変数

C++

C++のエッセンスを読んでいて、C++における型とオブジェクトと値と変数の定義が興味深かったので引用メモします。 SBクリエイティブ:C++のエッセンス のP5 §1.5型と変数と算術演算 より すなわち、宣言は、以下に示すような、名前付きの実体に対する、型の指…

「Boost.勉強会 #19 東京」に参加しました

2015/12/05に行われたBoost.勉強会 #19 東京に参加してきました。 connpass.com 朝10時からと、起きられるか大変不安でしたが、無事起きられて安堵しました。 会場としてなったIIJさんからお水を頂きました。ありがとうございます。 最初に@cpp_akiraさんか…

Visual C++ 2015 Update 1でC++にmoduleが試験的に実装された

要約 12月1日のUpdate1でVisual C++にmoduleが試験的に実装されました channel9.msdn.com このmoduleの文法はおおよそ http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4214.pdf と近いものになっています。 moduleとは javaのpackage/importや、…

Visual Studio CodeのRunnerを試してみた

mattn.kaoriya.net こちらの記事で紹介されているRunnerを試しに使ってみました。 Visual Studio Marketplace Runnerのインストールが完了したら、Visual Studio CodeのUser Settingsから、setting.jsonを編集します。 runner.languageMapというキーのオブジ…

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…