C++と色々

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

2013-01-01から1年間の記事一覧

C++で文字列を数値に変換する方法

C++

元ネタに載っている変換方法を使ったサンプルを書いてみた。*1 atoi #include <cstdlib> #include <iostream> #include <string> #include <typeinfo> int main() { const std::string str("123"); auto num = std::atoi(str.c_str()); std::cout << typeid(num).name() << " : " << num << std::e</typeinfo></string></iostream></cstdlib>…

BOOST_PP_ITERATE

以前の記事でBOOST_PP_REPEATについて書きました。 BOOST_PP_REPEATは似たような記述を繰り返す際に利用できます。例えば、以下の様です(このコード自体に意味はありませんが…) #include <boost/preprocessor/cat.hpp> #include <boost/preprocessor/repeat.hpp> #define VALUE(z, n, d) const int BOOST_PP_CAT(VALUE_, </boost/preprocessor/repeat.hpp></boost/preprocessor/cat.hpp>…

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

色々やりたいことがあって手がつかないという状態なので整理する。 やらなければならないこと 就活 卒研のプログラム やりたいこと オレオレライブラリ書き 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…