[ create a new paste ] login | about

Link: http://codepad.org/OBV20PfC    [ raw code | output | fork ]

C++, pasted on Feb 17:
// ------------------------------------------------ 共通の 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;	
}


Output:
1
2
3
4
普通にメソッド実行: 123
メソッドオブジェクトから実行: 123
普通にメソッド実行: a
メソッドオブジェクトから実行: a


Create a new paste based on this one


Comments: