codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
// ------------------------------------------------ 共通の getMethodを持った抽象クラス template<typename T> class _Abstract { public: typedef T (_Abstract<T>::*Method)(); virtual T get() = 0; Method getMethod() { return &(_Abstract::get); } }; // ------------------------------------------------ もう一段かまして具象クラス向けテンプレート template<typename T> class Object: public _Abstract<T> { T value; public: Object(T val): value(val) {} T get() { return value; } }; // ------------------------------------------------ 具体的なラッパ class Int: public Object<int> { public: Int(int v): Object<int>(v) {} }; class Char: public Object<char> { public: Char(char v): Object<char>(v) {} }; int main() { Int a(123); Char b('a'); Int::Method m1 = a.getMethod(); printf("普通にメソッド実行: %d\n", a.get()); printf("メソッドオブジェクトから実行: %d\n", (a.*m1)()); Char::Method m2 = b.getMethod(); printf("普通にメソッド実行: %c\n", b.get()); printf("メソッドオブジェクトから実行: %c\n", (b.*m2)()); return 0; }
Private
[
?
]
Run code
Submit