C++と色々

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

やりたいことまとめてみる

色々やりたいことがあって手がつかないという状態なので整理する。 やらなければならないこと 就活 卒研のプログラム やりたいこと オレオレライブラリ書き C++ライブラリ WinAPIラップライブラリ DirectXラップライブラリ DXライブラリで3Dゲーム制作 Direc…

内定欲しい

7月は就活充でした……

マルチメソッド2 力任せ編

C++

マルチメソッド1 自作編の続きです。 ここからはModern C++Design に載っている方法を1つずつ試したいと思います。 その際、Boost.Mplを使用しています。生ポインタ使っています。スマートポインタを使うべきですが、本のサンプルをなるべくそのまま使いたい…

マルチメソッド1 自力編

C++

Modern C++ Designに載っている話です。マルチメソッドとは多重ディスパッチとも言い、関数を複数の引数の動的な型によって呼び分けることです。ゲームで、2つのオブジェクトによって最適な衝突判定関数を呼び分ける時などに使えます。*1 どうにかして擬似的…

式テンプレートっぽい何か

C++

boost::numeric::ublas::vectorのExpression Templatesってどうやって実装してるのか気になり、ヘッダを眺めて大事そうなとこだけ真似(劣化コピー)してみました。 式自体を定義しているヘッダです。 //ファンクタを適用する式 #ifndef NEK_MATH_VECTOR_EXPRE…

boost::any

boost::anyは動的型とも言われています。まるで動的型付け言語のようにboost::anyにはあらゆる型のオブジェクトを代入し、取り出すことができます。boost::anyに格納することが出来る型の要件は以下の3つです。 コピーコンストラクト可能なこと 例外に対して…

プリプロセッサを使ってmake_array書いてみた

C++

C++11の機能を使ったmake_arrayはこちらを参照して下さいmake_array 書いてみた - とくにあぶなくないRiSKのブログVisual C++ Nov 2012 CTPで可変長テンプレート引数対応とのことですが、不完全なうえ標準ライブラリが可変長テンプレート引数未対応なのでま…

Google TestをVisual C++ 11でビルドする

解凍したフォルダにmsvcというフォルダがあり、その中にVisual Studio 2008の.slnファイルがあるのでそれを2012に変換してビルドすればいいのですが、そのままビルドしようとするとstd::tuple辺りでエラーが出ます。これはVC++のSTLがまだC++11の可変長テン…

BOOST_PP_REPEAT

BOOST_PP_REPEATは引数に渡されたマクロを指定回数分展開するマクロです。 書式は以下のようになります。 BOOST_PP_REPEAT(c, m, d) cは、何回引数に渡されたマクロを展開するかの回数を指定します。 例えば5を入れれば指定されたマクロは5回展開されます。 …

boost::program_options

boost::program_options名前空間にあるクラスを用いると、コマンドライン引数(オプション)を柔軟に簡単に解析できます。自作アプリケーションでオプションをつけるのならば使わない手はないです。 具体的には、渡されたコマンドライン引数をコマンド毎に(…

gistのコードをブログに貼り付けてみるテスト

えいっ gistのコードのページの左側にあるEmbed this gistの中身をコピーします。 単に貼り付けても表示されないので、IDを削除します。更に、>と<で囲みます。 <script src="https://gist.github.com/nekko1119/5205577.js"></script> ←だめ <script src="https://gist.github.com/5205577.js"></script> ←表示されるこのままだと崩れて表示されてしまうので、Gistの埋め込みが崩れる(2013/02…

ローカルクラス

C++では関数内にもクラスを定義することができます。このクラスはローカルクラスと呼ばれ、静的メンバを定義できない、ローカル変数にアクセス出来ない、関数の外からインスタンス化ができない、などの特徴があります。 ローカルクラスの使いどころを2つ紹介…

このブログについて

ブログの語調が統一されていないのが自分で気になっています… 過去のは修正しませんがこれからはですます調に統一しようと思います。あと、プログラムの記事ですが、基本的に自分が本やネットで見つけたもので気になったものや整理したいものをメモする感じ…

STLコンテナの要素の削除方法

シーケンスコンテナ(vector, string, deque)とlistと連想コンテナ(set, map, 以下略)、の3つに分けて整理します。 "c"は、その時のコンテナのインスタンスを表します。std::を省略しています。完全なコードではありません。 特定の値を削除したい時 ・シーケ…

型特性によるオーバーロード

型特性によるオーバーロードはいくつか方法がありますが、目的に合わせた方法をとるのが良いと思います。・何通りかの型特性でオーバーロードをしたい場合 ・ある型特性かどうかでオーバーロードしたい場合 ・ある型特性でしかオーバーロードしてほしくない…

コンストラクタを書いたつもりが関数宣言とみなされる

コンストラクタを書いたつもりが関数宣言とみなされる時があります。 これは俗に、「C++で最も奇妙な解析」と言われています。 以下の様な時です。 struct foo{}; struct hoge { //引数を1つ取るコンストラクタ hoge(foo f) : f_(f) { } void func(){} foo f…

VC++2010がLNK1123

VC++2010のプロジェクトがLNK1123エラーでビルドできなかった。調べたら原因はVS2012をインストールしたことらしい。 ググったらVC++2010のヴァージョンをSP1というものにアップグレードすれば動くらしい。アップグレードしたら動いた。 参考VS2010でLNK1123…

ポインタの文法メモ

配列へのポインタも関数ポインタも意味はわかるけど書かないから文法を忘れてしまう… ネストしてくるとごちゃごちゃしてくる。 なのでメモ (タグC++でいいのだろうか;) void func(){} int main() { //配列 int a[5]; a[4] = 4; //ポインタ int* b = &(a[0])…

decltype

C++

自分の理解が間違っているのか、MSVC Nov 2012 CTPが対応していないのか、が分からないのでブログに投げてみるテスト。 std::vector v; decltype(v)::value_type n; ってill formedですか? #include <vector> template <class T> struct type_holder { typedef T type; }; in</class></vector>…

範囲for文を自作クラスで使う

C++

範囲for文とは C++11に範囲for文がある。VisualStudioでは2012から使えるようになった。 これは、STLのコンテナや、組み込み配列をfor文で最初から最後までの要素を処理する時に、従来のfor文でいちいち「最初から、終わりまで」という範囲を書かなくて済む…

VS2012

VS2012を導入したので(あと2012.11版のVC++)、VS2012で追加された新しいC++11の機能を試してみた。機能を試すことが目的なのでソースの意味や綺麗さは皆無です… #include <vector> #include <iostream> //新しいSTL #include <atomic> #include <chrono> #include <condition_variable> #include <filesystem> #include <future> #includ</future></filesystem></condition_variable></chrono></atomic></iostream></vector>…

boost::in_place

boost::in_placeを使うと確保したメモリにオブジェクトを後から構築できるようになります。 copy不可なオブジェクトも再構築で再代入のような振る舞いをさせられます。trivial destructorをもつクラスはデストラクトせずに再構築できます。 #include <iostream> #inclu</iostream>…

trivial class

trivial class wikipediaの定義によると、 trivial なクラス・構造体は、以下のように定義される。 コンパイラ定義のデフォルトコンストラクタを持つ。コンストラクタの default 指定の記法を用いてよい (SomeConstructor() = default;)。 コンパイラ定義の…

Visitorパターン

Visitorパターンはクラスを、データクラス(Acceptor)と処理クラス(Visitor)に分離し、データクラスを変更せずに新しい操作を定義できるようにするパターンです。 データクラスが異なるいくつかの要素を持ち、それらの型ごとに異なる操作が必要な時 データク…

Decoratorパターンとパラメータ化継承

C++

処理の前後に処理を追加する、ってなんか2つ似てるなと思ったので書いてみて、うんやっぱ似てるってなった。 #include <iostream> #include <string> using namespace std; //デコレータパターン namespace dec { //インターフェイス class writer { public: virtual void wri</string></iostream>…

boost::assign

コンテナを初期化や代入する際、push_back等を並べる必要がなく、簡単に書けるようになります。 イテレータ初期化に対応しているクラスなら使えます。サンプル #include <boost/assign.hpp> #include <vector> #include <list> #include <map> #include <string> using namespace std; int main() { using </string></map></list></vector></boost/assign.hpp>…

boost::signals2

C++のためのAPIデザイン読んでいて初めて知ったのでメモ。 複数の関数を入れられるstd::functionみたいなもの。 同じシグネチャの関数ポインタ・関数オブジェクトを複数登録して、まとめて呼び出すことができる。 呼び出す順序はデフォルトだと、登録した順…

Javaの共変

日経ソフトウェア読んでいたら初めて知ったのでメモ。共変とは子クラスは親クラスのメソッドをオーバーライドする時に、メソッドの型も子クラスの型にしてもいいという機能。 ジェネリクスではサポートされていない。 String型をObject型に代入できるのはア…

boost::optional

夏休み中サボってしまった… マイペースで行こう() あ、自分のプログラムに関する理解が誤っているの気づいた方はコメントで突っ込んで頂けると嬉しいです…今回はboost::optionalを試してみよう boost::optionalは、T型に無効値を追加した型みたいなもの。C…

妹のジンテーゼ

「妹のジンテーゼ」という漫画があります。 グランドジャンプに連載していて、6月に第1巻が発売されました。 本誌で読んでいて面白かったので買いました。読んでいて色々ためになる考え方が載っていて面白かったです。 ポケモンはやっていますよ〜チャンピオ…