검색을 통해 발견할 수 있다. 그러나 워낙 힘들게 찾았기에 다른 사람들도 그러지 않을까 생각한다. 나만 해도 최근에 쓸 일이 있었는데, 일전에 정리한 샘플이 있었는데도 힘들었으니... 그나저나 정말 간만의 프로그램 글 업데이트다... 그 동안 얻은게 없는 건 아닌데. 예전에 오우거 공부할 때를 생각하면서 정리해봐야겠다.
//#include "stdafx.h" #include < cstdio > #include < cstdlib > class Test { public: // 꼭 클래스 내부에 타입 정의를 해야한다 typedef void (Test::*FunctionPointer)(int); Test() : _total(0) {} void Add(int value) { _total += value; } void Subtract(int value) { _total -= value; } int GetTotal() const { return _total; } // 함수 포인터를 비교해서 함수 이름을 반환한다 const TCHAR* GetName(FunctionPointer functionPointer) const { if(&Test::Add == functionPointer) { return _T("Test::Add()"); } else if(&Test::Subtract == functionPointer) { return _T("Test::Subtract"); } return _T("Test::?"); } private: int _total; }; int _tmain(int argc, _TCHAR* argv[]) { Test test; Test::FunctionPointer functionPointer = 0; // 인자가 1개 이상있으면 덧셈 함수를 실행한다 if(0 < argc) { functionPointer = &Test::Add; } else { functionPointer = &Test::Subtract; } for(int i = 0; i < 100; ++i) { // 포인터 값을 구체화해서 인스턴스의 멤버 함수를 실행시킨다 (test.*functionPointer)(i); } _tprintf( _T("total: %d (by %s)\n"), test.GetTotal(), test.GetName(functionPointer)); system("pause"); return 0; }
'코드' 카테고리의 다른 글
googletest 사용하기 (0) | 2010.06.29 |
---|---|
libcurl 정적 링크 오류 해결하기 (0) | 2010.05.20 |
CQ: Calculation Quotient (0) | 2006.11.19 |
V Player (0) | 2006.11.19 |
easyVNC 프로토타입 (0) | 2006.10.18 |