myoukakuのブログ

C++でゲームエンジンを作っていきます。

C++

空のstd::vectorのdataの値

空のstd::vectorに対してdata()を呼び出した時、任意の値を返しても良いことになっている。 つまり nullptr かもしれない 有効なアドレスを指したポインタかもしれない なぜかというと [data(),data() + size()) が有効な範囲を表すと定義されており、size()…

静的コード解析

「Doom 3」「Quake 3: Arena」「Wolfenstein: Enemy Territory」を、静的コード解析ツールである、CppCheckとPVS-Studioに掛けて結果を比較した記事。 Cppcheck and PVS-Studio compared PVS-Studioの宣伝記事だと思うので、CppCheckとの比較はさておき、検…

ソースファイルのエンコードと文字列リテラルのエンコード

C++

結構勘違いしている人が多いし私も最近まで知らなかったのですが、C/C++のソースファイルのエンコードと文字列リテラルのエンコードは同じではありません。おそらく処理系依存だと思います。 VisualStudioの場合、ソースファイルのエンコードに関係なく文字…

Visual Studio 2013 の std::is_pod のバグ

Visual Studio 2013 Update 3 では以下のコードがコンパイルエラーになります。 #include <type_traits> static_assert(std::is_pod<int>::value == true, ""); static_assert(std::is_pod<int*>::value == true, ""); static_assert(std::is_pod<int&>::value == false, ""); // 1 static_</int&></int*></int></type_traits>…

boost::file_system の directory_iterator は "." と ".." をとばす

boost::file_system::directory_iteratorを使うとディレクトリ内のファイルやディレクトリを簡単に列挙することができます。 #include <boost/filesystem.hpp> using namespace boost::filesystem; for (directory_iterator it(current_path()); it != directory_iterator(); ++it)</boost/filesystem.hpp>…

Boost.ConstrainedValueはどうなった

ゲームプログラミングをしていると、取りうる値の範囲が限られている変数がよくあります。ゲームプログラミングに限らず、いろいろなプログラムで必要になると思います。 なのでBoost.ConstrainedValueには期待していました。 Boost.ConstrainedValueのレビ…

テンプレートパラメータパックのインデックスアクセス

Variadic Template をいじくりまわしていて、テンプレートパラメータパックのインデックスアクセスがほしいと思いましたが標準に無いんですね。素直に線形オーダーで実装すると数が多いときに使い物にならなかったのですが、対数オーダーで実装できるようで…

make_static_map で pull request 出そうと思っていたら先を越された

C++

make_static_mapでAkira Takahashi (id:faith_and_brave)さんからpull requestどうぞって言われたのでpull requestのやりかたを調べたりしていたら先にAkiraさんがmake_static_mapをコミットしていた! static_map : add helper function. · be3624a · faith…

static_mapのヘルパー関数、make_static_mapを書いた(3)

C++

static_mapのヘルパー関数、make_static_mapを書いた(2) - myoukakuのブログ の続き テンプレートパラメータパックをtupleに受けるのでなく、直接要素を取り出せば行けるかと思い、 VSでも動くパラメーターパックヘルパーを作った - TXT.TXTを参考にやってみ…

static_mapのヘルパー関数、make_static_mapを書いた(2)

C++

static_mapのヘルパー関数、make_static_mapを書いた(1) - myoukakuのブログ の続き static const auto m = make_static_map( Color::Red, std::string("Red"), Color::Green, std::string("Green"), Color::Blue, std::string("Blue")); と書けるmake_stati…

static_mapのヘルパー関数、make_static_mapを書いた(1)

C++

static_mapのヘルパー関数、make_static_mapを書いた(0) - myoukakuのブログ の続き まず、以下のように書いてみました。 template <typename T, typename ... Types> struct head { using type = T; }; template <typename ... Types> struct key_type { using type = typename head<Types...>::type::first_type; }; templ</types...></typename></typename>…

static_mapのヘルパー関数、make_static_mapを書いた(0)

C++

static_mapが便利なので重宝しています。 スタックを使用するmapを作りました - Faith and Brave - C++で遊ぼう これがあれば、エラーコードとメッセージの対応など、かなりの部分でswitch-caseや危険なテーブル引きを撲滅することができます。 しかし不満点…