Library2010. 11. 9. 12:18

reference_wrapper 는 클래스, 함수, 변수 등의 참조를 레핑 한다.
참조(포인트)값을 사용할때 명시적으로 지정할수 있다.
클래스에서는 추상화 등에서도 유용하게 사용할수 있을듯 하다.


#include "FUNCTIONAL"
using std::tr1::reference_wrapper;
using std::tr1::cref;

#include "IOSTREAM"
using std::cout;
using std::endl;

class base
{
public:
	virtual void ShowMe()
	{
		cout << "base" << endl;
	}
};

class derived_first	: public base
{
public:
	void ShowMe()
	{
		cout << "derived_first" << endl;
	}
};

class derived_second : public base
{
public:
	void ShowMe()
	{
		cout << "derived_second" << endl;
	}
};

void ShowMe1()
{
	cout << "ShowMe1 func" << endl;
}

void ShowMe2()
{
	cout << "ShowMe2 func" << endl;
}

void main(void)
{
	derived_first	first;
	derived_second	second;
	
	reference_wrapper wr_first(first);	
	reference_wrapper wr_second(second);	

	wr_first.get().ShowMe();
	wr_second.get().ShowMe();

	typedef void(*const FUNC)();	
	reference_wrapper wr_func(&ShowMe1);	//전역 함수의 레퍼런스

	wr_func();

	wr_func = cref(&ShowMe2);			//함수 변경
	wr_func();
}

Posted by 상현달