본문 바로가기
프로그래밍/boost

boost::mem_fn 예제에 std::tr1::tuple 예제의 조합

by neive 2011. 11. 15.
728x90




mem_fn 을 이용해서 어떤 공통된 function 을 구동 시키되 넘기는 변수는 tuple 을 이용해 유동성 있게 넘기는
방법을 예제로 만들었습니다 1타 2피! 예제랄까... serialize 때 조금 심플해 보일 순 있겠네요.. 가독성이나 처리
문제등 개선점은 있지만;;

// start

#include "stdafx.h"

#include <regex>
#include <tuple>
#include <functional>
#include <boost/function.hpp>

class CWork
{
private:
	typedef void(*const fun)();
	std::tr1::reference_wrapper<fun> m_RunFunc;
	int m_Val;

public:

	void SetWrapper(std::tr1::reference_wrapper<fun> f)
	{
		m_RunFunc = f;
	}

	template<class T> void Do(T val)
	{
		std::cout << std::tr1::tuple_size<T>::value << std::endl;
		// 사실상 0 번만 알면 뭐.. 시리얼라이즈 분류는..
		std::cout << std::tr1::get<0>(val) << std::endl;
		std::cout << std::tr1::get<1>(val) << std::endl;
		// output 2, 1, 3.14
		m_RunFunc();
	}

	CWork(int n, std::tr1::reference_wrapper<fun> f) : m_Val(n), m_RunFunc(f) {};
};


void Print()
{
	std::cout << "-_-!" << std::endl;
}

void Print2()
{
	std::cout << "-_-!!" << std::endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
	CWork temp(9, std::tr1::cref(&Print));
	temp.SetWrapper(std::tr1::cref(&Print2));
	typedef std::tr1::tuple<int, float> tyTuple;
	tyTuple t = std::tr1::make_tuple(1, 3.14f);
	boost::mem_fn(&CWork::Do<tyTuple>)(temp, t);

	int n;
	std::cin >> n;

	return 0;
}

// end
728x90

댓글