2010-03-23から1日間の記事一覧

enable_ifメタ関数

C++テンプレートテクニック 5-4 Boostにあるenable_ifというメタ関数の話。これはうまい仕組みだなぁ。

型特性メタ関数

C++テンプレートテクニック 5-3 特殊化を利用して型をチェックするメタ関数を作る #include <iostream> using std::cout; using std::endl; template<class T> struct is_pointer { static const bool value = false; }; template<class T> struct is_pointer< T* > { static const bool </class></class></iostream>…

参照配列の特殊化と型推論

C++

C++テンプレートテクニックを読んでいて見慣れない構文が出てきた template<class T,std::size_t N> struct range_iterator< T[N] > { typedef T* type; }; このT[N]で特殊化してる部分が良く分からなかったので自分なりに色々調査してみた。まずはどういうときに呼ばれるのか試して</class>…

Range-base STL アルゴリズム

C++テンプレートテクニック 5-2 ここの話はいろいろと面白いですね。beginやendを汎用化して呼び分ける。コードも簡素になるし素晴らしいです。ただし、endの定義が以下のように参照の配列を受け取る前提になっているので template<class T,std::size_t N> T* end(T (&ar)[N]) { ret</class>…

継承を利用したポリシー

C++テンプレートテクニック 6-4 http://d.hatena.ne.jp/pknight/20100323/1269358966続き。お次は継承を利用したポリシーです。 #include <iostream> using std::cout; using std::endl; template<class Policy> class CClass : public Policy { public: void func () { this->foo();</class></iostream>…

インスタンスメンバを利用したポリシー

C++テンプレートテクニック 6-4 前回の記事ではstaticメンバ関数を使用したポリシークラスの実装になっていました。今回はインスタンスメンバを使用した場合のポリシーについてです。 #include <iostream> using std::cout; using std::endl; template<class Policy> class CClass { </class></iostream>…

ポリシー

C++テンプレートテクニック 6-1 またしても新しい単語が登場。ポリシー。要約すると同じ関数を持つ別々のクラスを指定できるようにするテンプレートといった感じでしょうか。 #include <iostream> using std::cout; using std::endl; template<class T> void func () { T::foo()</class></iostream>…