2006-10-11(水) 曇一時雨 安静時心拍数 59 [長年日記]
_ ホストクラスとポリシークラス
先日調べた方法で実装してみました。
% cat policya.h #ifndef POLICYA_H #define POLICYA_H class PolicyA { protected: ~PolicyA(); int method(int hoge); int method(double fuga); }; #endif /* POLICYA_H */
% cat policya.cpp #include "policya.h" #include <iostream> PolicyA::~PolicyA() { } int PolicyA::method(int hoge) { std::cout << "PolicyA::method(int) " << hoge << std::endl; return 0; } int PolicyA::method(double fuga) { std::cout << "PolicyA::method(double) " << fuga << std::endl; return 0; }
% cat policyb.h #ifndef POLICYB_H #define POLICYB_H class PolicyB { protected: ~PolicyB(); int method(int hoge); int method(double fuga); }; #endif /* POLICYB_H */
% cat policyb.cpp #include "policyb.h" #include <iostream> PolicyB::~PolicyB() { } int PolicyB::method(int hoge) { std::cout << "PolicyB::method(int) " << hoge << std::endl; return 0; } int PolicyB::method(double fuga) { std::cout << "PolicyB::method(double) " << fuga << std::endl; return 0; }
% cat host.h #ifndef HOST_H #define HOST_H template <typename Policy> class Host : public Policy { public: ~Host(); int method(int hoge); int method(double fuga); }; #endif /* HOST_H */
% cat host.cpp #include <iostream> #include "host.h" #include "policya.h" #include "policyb.h" template <typename Policy> Host<Policy>::~Host() { } template <typename Policy> int Host<Policy>::method(int hoge) { Policy::method(hoge); }; template <typename Policy> int Host<Policy>::method(double fuga) { Policy::method(fuga); }; template class Host<PolicyA>; template class Host<PolicyB>;
% cat main.cpp #include <iostream> #include "host.h" #include "policya.h" #include "policyb.h" int main() { Host<PolicyA> A; Host<PolicyB> B; A.method(1); // "PolicyA::method(int) 1" を表示 B.method(1.5); // "PolicyB::method(double) 1.5" を表示 return EXIT_SUCCESS; }
- [C++] ポリシクラス
- テンプレートあれこれ (3) -- 明示的なインスタンス生成
- Modern C++ Design―ジェネリック・プログラミングおよびデザイン・パターンを利用するための究極のテンプレート活用術 (C++ In‐Depth Series)(アンドレイ アレキサンドレスク/Andrei Alexandrescu/村上 雅章)第1章 ポリシーを基にしたクラス・デザイン
_ portupgrade python
Pythonが2.5にversion upgradeしたので更新しました。
After upgrading of lang/python, you must rebuild all its consumer ports to make them get ready to Python 2.5. To do this, you will need to: pkgdb -uf && cd /usr/ports/lang/python && make upgrade-site-packages
[ports/UPDATING - view - 1.402より引用]
とあるので
# portupgrade python && pkgdb -uf && cd /usr/ports/lang/python && make upgrade-site-packages
として終了です。