ぷろみん

プログラミング的な内容を扱ってます

C++20時代のポリモーフィズム

概要 ポリモーフィズム良いですよね。 でも、継承嫌ですよね。 MixInみたいな綺麗な継承が使える場面も現実的なサービスを考えると難しい。 そこで簡単に追加、削除ができ可読性も悪くないstd::variantとconceptを使ったC++20時代のポリモーフィズムを紹介し…

vcpkgでinstallするとCould not locate a complete toolsetとか言われる。

概要 Warning: The following VS instances are excluded because the English language pack is unavailable. C:\Program Files (x86)\Microsoft Visual Studio\2017\Community Please install the English language pack. Could not locate a complete too…

C++17から導入される範囲 for ループの制限緩和で何が変わるか

C++

概要 C++17で範囲forループのbeginとendで違う型を指定できるようになりました。 範囲 for ループの制限緩和 - cpprefjp C++日本語リファレンス これによって何が変わるのでしょうか。 イテレータの思想の違い STLのイテレータはメモリはコンテナが持ってイ…

Visual Studio2017にVsVimをインストールすると上スクロールがバグる

概要 新しい環境にVisual Studio2017とVsVimをインストールすると上スクロールの際に期待しない動きをすることがある(2/3回) バグの再現させ方 文字の折り返しが起こっているスクロールできるファイルでGHと移動すると私の環境では画面一番上の行にカレント…

C++17からはwstring_convertが非推奨となるので環境毎のコードが推奨される

概要 推奨されるマルチバイト文字変換。 非推奨 C++17からスタンダードライブラリのものは非推奨になる cpprefjp.github.io Visual Studioで下記のようなコードをC++17を有効にした状態で書くと #include <codecvt> #include <locale> int main() { std::wstring_convert<std::codecvt_utf8<wchar_t>, wch</std::codecvt_utf8<wchar_t></locale></codecvt>…

C++の難しめな用語集

C++

概要 先日、言いたい用語がすぐに出てこなかったので備忘録を作った。私が学習するのが遅かったり難しかったものを集めた。 その特性から多くは語らないのでググって。 Return Value Optimization (RVO) Named Return Value Optimization(NRVO) データ指向設…

VisualStudio2017はC++17に対応しているがデフォルトでは無効になっている

C++17を有効にする プロジェクト > プロパティ > 構成プロパティ > C/C++ > 言語 > C++言語標準 から設定できます。 せっかくMSが標準まで追いついてくれたのに有効にしないともったいないです。 おまけ 上記を言いたかっただけなんですが、あまりに短かった…

Chromeとかで使われているグラフィクスライブラリSkiaのWindowsビルド

手順 git clone https://github.com/google/skia masterブランチだとWindowsに優しいものが入っていないのでtagを使います。 git checkout -b dev refs/tags/chrome/m39_2138 上記タグのコミットだとリポジトリルートにmake.batが存在するので、こちらをVisu…

std::vectorのようなコピーコストの高いクラスに参照を使ってはいけないシチュエーション

C++

概要 RVO(Return Value Optimization)の話です。特別に触れませんがNRVO(Named RVO)も最適化されるものとして話を進めています。 昔の効率の良いコード void Initialize(std::vector<int>& buffer) { // bufferに色々な計算結果を詰める buffer.emplace_back(5); </int>…

3Dプログラマのための数学

概要 画像付きで詳細に解説しようとしたらモチベーションが足らなかったので下書きをブログで。 Qiitaとかだと数学記号使えるので恰好良く書ける反面書くの面倒。 内積 3Dプログラミングで一番出てくるやつ。 何故大人気かというと三角関数の中で一番高速で…

C++コーディングガイドライン哲学1

C++

概要 https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md の「P: Philosophy」の感想や補足です。 アイディアを直接コードで表現する 例としてStrong typeやfor文の代わりにアルゴリズムを使うことを提案しています。 また、con…

好きなC++ランキング

C++

好きなだけで使えるとは言っていない所がポイントです。 コンパイラだけでなく、周辺環境も含めて考慮しているのでC++としています。 1位 wandbox + clang/gcc 個人的に新機能を試す時が一番幸福度が高いのでこの組み合わせが好きです。 環境構築が必要なし…

自分で作ったクラスをrange based forに対応させよう

C++

Range based forは素敵 for(auto value: vector){ } 良いですね、スマートです。 しかし、これstd::vector等のスタンダードライブラリに入っているクラスしか使えないと思ってはいないでしょうか? 私が体験した職場で自身のクラスをrange based forに対応さ…

綺麗にコードを書く技術

概要 難しい処理をこなす処理を簡単に描けるプログラマではそのコードは汚いものです。 思うに綺麗にコードを書くことは技術のレベルとは関係ないので執着されないのでしょう。 しかし、私は綺麗にコードを書くことは無駄には思えません。 技術が技術と呼ば…

毎月開催、自分頑張れよ会議

概要 8月の振り返りと9月の目標について 2017年8月の目標 - ぷろみん 8月の振り返り とりあえず、無事フリーランスになれた。 Rustの勉強はちょっとずつ進めている。 英語は相変わらず単語アプリで遊ぶ程度。 結局ブログも書こう書こうと思ってたけどこんな…

2017年8月の目標

概要 マイルストーンを置かないと人間はどこまでも怠惰になるので。 月初めに立てて、月終わりに見直そう。 したいこと 大き過ぎで小目標に向かないのもとりあえず書きだす。 C++ 英語 ブログ 独自ドメイン Rust OSS ゲーム制作 クォータニオンの解説 文章書…

オイラー角と空間座標系

概要 複数の環境間での回転のインポート、エクスポートについて調べていたのですが、全然進まないので最小限のアウトプットを目指したメモです。 オイラー角 説明はWikipediaに投げます。 重要なのは単にオイラー角といっても12通りの表現方法があることです…

中途半端なbit幅の符号付整数を扱い易くするSign extending trick

C++

charじゃ大きすぎる charは何気に256もの数字を記録できます。 しかし、組み込みのような制限の厳しい環境では1bitでも送受信のデータは節約したいものです。 そんな時はbit演算を駆使してデータをやりとりすることになるのですが、困った状況というものがあ…

C++では典型的なif文は使わない方が良い

C++

よくある間違い あなたはコンテナから指定のデータを探す時に以下のようなコードを書いていませんか? for(int i = 0; i < 10; i++) { if(list[i] == 5) { // do something } } 正しい書き方 // #include <algorithm>が必要 auto result = std::find(list.cbegin(), lis</algorithm>…

Unityの新入力システム

Unityの入力システムは汎用性が低い Unityはマルチプラットホームという利点がありますが、入力システムの汎用性は低いです。 当然同一で処理したいタッチ処理とマウスクリック処理を別々に書かなければいけなかったり、マルチプレイヤーゲームで1プレイヤ…

Unityのフォルダ構成ベストプラクティス

モチベーション Unityでは多岐にわたるプロジェクトを考慮してフォルダ関係のサポートは薄く、プロジェクト毎に自由に設定しなければならない。 自由は素晴らしいことだが統一規格がないことは他の人のコードを読む時にもんにゃりする。 そこで、私が良いと…

そもそもがそもそもだった

概要 何故またこっちで書こうと思ったのか。 そもそもの動機 将来性を考えると独自ドメインでブログは運用すべき。 なぜなら資産であるブログ記事を検索サイトに模倣と思われず引っ越す方法がないからだ。 ブログを書くモチベーション 結局は多くの人に見て…

ブログを移転します

はてなブログに頼りっきりでしたが、今は便利になって簡単に個人でもブログサービスを始めることができそうなので移転することにしました。 独自ドメインでGhostを使ってやっていこうかと思います。 tcat.space 見た目をもう少しなんとかしないとなーと思い…

C++で無理矢理クロージャを使ってみる

C++

クロージャ 現在クロージャという表現を使う場合状態を持ったラムダを指す場合が多い気がします。 つまり、ワンライナーで書けるクラスといった感じです。これはC++では関数オブジェクト的な手法で似たようなことができますが、javascript程普通なものではあ…

C++の標準描画ライブラリに入るかもしれないCairoのサンプルをwindows向けにビルドしてみた

cairoとC++ 本の虫: Herb SutterがCairoのMLにC++標準規格にCairoを入れられないか打診中 環境 windows msys2 依存関係 $ pacman -S mingw-w64-x86_64-zlib $ pacman -S mingw-w64-x86_64-libpng $ pacman -S mingw-w64-x86_64-pixman $ pacman -S mingw-w64…

基本クラスの継承を考えたデストラクタの属性設定

C++

概要 この記事は間違った情報が多分に含まれるため https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#c35-a-base-class-destructor-should-be-either-public-and-virtual-or-protected-and-nonvirtual と https://github.com/…

シングルトンを使うのはやめよう

C++

概要 この記事はC++の作者Bjarne Stroustrup等によって書かれたコーディングガイドラインのAvoid singletonsの箇所の翻訳です。 https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#Ri-singleton シングルトンを使うのはやめよ…

DirectX12をビルド可能なプロジェクトを作る

前回 ようやくWindows10にしたのでDX12プログラミングを始めてみた - ぷろみん ビルド New Project -> Win32 Project -> Empty Project 新しく生成されたフォルダに前回ビルドに成功したサンプルの.cppと.hをコピーしてきます。 Solution Explorerのファイル…

ようやくWindows10にしたのでDX12プログラミングを始めてみた

概要 Windows10にしたらまず最初にすべき事といえば・・・ そう、DirectX12プログラミングですよね。 今回はその導入をやってみたのでメモしておきます。 Visual Studioのアップグレード 始めから入ってない人もここで入れるので一緒です。 Direct3D12 開発…

git-flowとhubコマンドを使ってCUIでgithubを活用する

github/hubコマンドを使ってみた - ぷろみんの続きです 概要 git-flowとhubを使います。 インストール $ sudo apt-get install -y git-flow 初期化 $ mkdir foo $ cd foo # hub導入済み $ git init -g $ git flow init # 質問には全部エンター $ git create …