C++と色々

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

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

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巻が発売されました。 本誌で読んでいて面白かったので買いました。読んでいて色々ためになる考え方が載っていて面白かったです。 ポケモンはやっていますよ〜チャンピオ…

boost::lexical_cast

自分がboost全然知らないので勉強目的 かつ 身内への宣伝を兼ねて色々使ってみることにする。最初はboost::lexical_cast 使い方はとっても簡単で、C++式のキャストと同じ書き方で文字列→数値、数値→文字列の変換を行う。自作クラスでも型変換子だか、演算子…

ポインタ分からん…

ポインタは難しくない、Cのポインタに関する文法がクソなだけや!!!!!! というわけで、ポインタに関してまとめてみようと思う。基本 int a; //int型 int* b; //int型へのポインタ = int*型 配列へのポインタ int* p[10]; //int*型の配列 int (*q)[10]; …

ADLが謎

C++

こちらのサイトを見て、テンプレート引数の型が宣言された名前空間もADLの範囲にはいるんだー、へー、と思った。 ADLはAgument Dependent Lookupの略で、実引数依存の名前検索と訳されている。要は、ある名前空間に所属している関数・演算子のオーバーロード…

POD型とnon-POD型

2012/3/19追記 この記事の情報はC++03のものです。C++11ではPOD型の定義が異なっています。POD(Plain Old Data)型とはコンストラクタがコンパイラが自動生成したデフォルトコンストラクタしか持たいない型のことです。int型やdouble型などの組み込み型、ま…

純粋仮想関数にも実装を書くことが出来た

C++

Effective C++読んでて初めて知った。今まで知らなかった…orz メモしておこう。 #include <iostream> using std::cout; using std::endl; class Base { public: virtual void Func() = 0; virtual ~Base() {} }; void Base::Func() { cout << "Base Func" << endl; } c</iostream>…

ポケモン報告

今バッチ4つで、5つめのジム挑戦中です。手持ちは ウォーグル(Lv33) チャオブー(Lv33) ヒマナッツ(Lv38) です。今作は元々難易度高めで、しかもチャレンジモードなのでなかなかハードで楽しいです。

Abstract FactoryパターンとBuilderパターンの違い

自分でファクトリとビルダーの違いがよく分かっていなかったのでメモAbstract Factoryパターンは、関連する部品群をまとめて、正しい組み合わせで作りたい時、つまり使用者はある製品を作りたいときに、正しい組み合わせの部品を使うことができるが、それぞ…

ポケットモンスターホワイト2買った

ポケットモンスターホワイト2買ったった。今の進行度は1つめのジムに挑むところ。手持ちはヒマナッツ(Lv8) ポカブ(Lv13)の2匹。ゆっくり進めようと思います。しかしまぁ、ヒマナッツよええええw レベル3や4のヨーテリーとタイマンして普通に負ける。だがそ…

Type Erasure Any編

C++

本の例題がboost::anyの簡易実装だったので、見ながら書いてみたやつ貼り。 #include <iostream> #include <typeinfo> using std::cout; using std::endl; class Any { public: //デフォルトコンストラクタ Any(); //テンプレートコンストラクタ template<class Type> Any(const Type& value)</class></typeinfo></iostream>…

型特性メタ関数(おまけ)

C++

前回の記事の続き。やっぱりboost使ってない版も書いてみた #include <iostream> using std::cout; using std::endl; //基底クラス:ガンダム class Gundam { }; //ガンダム派生クラス:エクシア class Exia : public Gundam { }; //ガンダム派生クラス:ゴッド class </iostream>…

型特性メタ関数

C++

例のテンプレート本(下記の参考文献参照)のSFINAEの章の勉強がてら、あるクラスが特定の基底クラスの派生クラスかどうか判定するプログラム書いてみた。 今回の場合はGundamクラスを派生してるかどうかチェックするプログラム #include <iostream> #include <boost/utility.hpp> using n</boost/utility.hpp></iostream>…

Observerパターン

Observerパターンの理解が怪しかったのでサンプル書いてみた。 こ、これであってるのか?! #include <iostream> #include <string> #include <list> class IObserver; class ISubject { public: virtual void Push(IObserver* observer) = 0; virtual void Notify() = 0; }; class I</list></string></iostream>…

2次ベジェ曲線

2次ベジェ曲線買いてみようと思った。折角なので自作のDirectXラッパライブラリで書いてみた。 #include <Frame.h> #include <Utility.h> #include <memory> #include <list> using namespace NekLib; using NekLib::Utility::DrawPoint; using NekLib::Utility::GetColor; #ifdef _DEBUG #prag</list></memory></utility.h></frame.h>…

配列のポインタ渡しと参照渡し

C++

C++テンプレートテクニックやっていたらSFINAEの章のサンプルコードに template<class T, size_t N> T* begin(T (&ar)[N]) { return ar; } という記述があった。これはなんだろう?と思ってググったこちらにまとめてあった。</class>

右辺値参照とムーブセマンティクス

C++

こちらを見るとよくわかります本当は怖くないムーブセマンティクス - yohhoyの日記(別館) 本の虫: rvalue reference 完全解説

テンポラリオブジェクトの寿命

C++

自分がテンポラリオブジェクトの寿命と参照、右辺値参照をちゃんと理解していないため色々試してみる。 値を代入する場合、右辺値と関数の戻り値ではデストラクトされるタイミングが違うみたい? #include <iostream> using namespace std; void Section(int n) { cout </iostream>…