C++と色々

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

2012-11-01から1ヶ月間の記事一覧

範囲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みたいなもの。 同じシグネチャの関数ポインタ・関数オブジェクトを複数登録して、まとめて呼び出すことができる。 呼び出す順序はデフォルトだと、登録した順…