パラメータ化継承 (C++テンプレートテクニック)
こんなこともできるのか.と目から鱗だった話.
pp74, 3-6 から.
ほとんど本のサンプルのままだけど:
// extend_param.cpp #include <iostream> #include <string> using namespace std; class text { public: text() {} ~text() {} string out(const string& str) const { return str; } }; template <class Base> class p : public Base { public: string out(const string& str) const { return "<p>" + Base::out(str) + "</p>"; } }; template <class Base> class a : public Base { public: string out(const string& str) const { return "<a>" + Base::out(str) + "</a>"; } }; int main(int argc, char *argv[]) { a<p<text> > hoge; cout << hoge.out("fuga") << endl; // output: <a><p>fuga</p></a> return 0; }
継承元をテンプレートパラメータによって決められるという話.
それと,3章の趣旨はGeneric Programming ということで,C++ の STL について.テータ構造とアルゴリズムを分離したことにより,データ構造を受け持つ, vector, list, set ... などと,アルゴリズム sort, copy, ... などを別々にそれぞれ1つずつ実装し,iterator を仲介して,1つのアルゴリズムの実装で複数のデータ構造に対応できる,という話.この話は前PFIでちらっとだれかから教えてもらったときにもすげえなあ,これ考えたやつはんぱねえ天才だなあ,などと思ったけど,再確認.なかなか面白い.
- 作者: επιστημη,高橋晶
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2009/04/25
- メディア: 単行本
- 購入: 16人 クリック: 224回
- この商品を含むブログ (54件) を見る