728x90
function callback map 을 만들고 거기에 tuple 을 이용한 변수의 적용을 하는 예제를 만들어 보았습니다
제가 실제 활용한 것은 어떤 패킷에 대한 콜백 처리와 서버 접속자에 대한 send 처리에 활용을 했지요
여기에 템플릿까지 잘 적용하면 더 멋진 모습이 되지만 일단 본 내용에서 전달하고자 하는 취지와는 안맞으니 생략 합니다 :)
예제 소스
#include "stdafx.h" #include <map> #include <boost/asio.hpp> // 본 예제와는 관계 없음, 다만 BYTE 정의 때문에 추가 #include <boost/shared_ptr.hpp> #include <boost/function.hpp> #include <boost/tuple/tuple.hpp> class CTestMng { typedef boost::function<void (boost::tuple<int, BYTE*>)> TYPE_CNT_CB; std::map<int, TYPE_CNT_CB> m_CallbackMap; // 유저 id 와 send 콜백 맵, 아이디를 알면 메세지를 보낼 수 있다 public: void Add(const int nID, const TYPE_CNT_CB cb) { m_CallbackMap.insert(std::map<int, TYPE_CNT_CB>::value_type(nID, cb)); } void Do(int nID, int nSize, BYTE* pData) const { std::map<int, TYPE_CNT_CB>::const_iterator it = m_CallbackMap.find(nID); if(it != m_CallbackMap.end()) (it->second)(boost::make_tuple(nSize, pData)); } }; class CTest { public: void TestCallbackFunction(boost::tuple<int, BYTE*> val) { std::cout << "run : TestCallbackFunction " << std::endl; } }; int _tmain(int argc, _TCHAR* argv[]) { boost::shared_ptr<CTest> pTest(new CTest); // 매니저에 0번 아이디와 콜백 추가 CTestMng test; test.Add(0, std::bind1st(std::mem_fun(&CTest::TestCallbackFunction), pTest.get())); // 0 번 아이디의 콜백 실행 test.Do(0, 0, NULL); int n; std::cin >> n; return 0; }
728x90
'프로그래밍 > boost' 카테고리의 다른 글
boost::ptr_unordered_map (0) | 2013.05.24 |
---|---|
boost::program_options (0) | 2012.11.16 |
boost::tuple / tuples / tuples::tuple (0) | 2012.11.06 |
boost::shared_ptr 과 Virtual Function 과 boost::timer (0) | 2012.10.25 |
boost::random (0) | 2012.10.24 |
댓글