이번 항목은 저번 13항목, 14항목에서 만들어보았던 private 기반 상속과 HAS-A 기반 관계에 대해 비교해 보는 항목이다. StackImple을 private 기반 클래스나 멤버 개체로 사용하는 것 중에 어느 기법이 더 좋은가? Stack의 두 버전은 얼마나 재사용 가능한가? 내재된 데이터형인 T의 요구사항은 무엇인가? Stack은 함수에 대한 예외 규격을 제공해야 하나? 생각해 보자. 1. private 상속이 좋은가? HAS-A 관계가 좋은가? 왜 이런 비교를 하는고 하면, 두 상속 모두 "구현 상속" 이라는 명제가 깔리기 때문이다. 클래스 기반 상속은 HAS-A 기반 관계 보다 더 관계를 맺는다.. 마치 머리에 붙은 껌 같이 강력하다. 그렇기 때문에 대부분의 사람들은 HAS-A 관계으로도 ..
분류 전체보기 검색 결과
바인드 성능 테스트 : update 2014.06.12 Bind는 언제 사용 해야 하는가? bind 자체는 성능 향상이 아닌, 생산성 향상을 위한 유틸리티라고 나는 생각한다. 왜냐하면 bind로 만든 콜백 등은 더 많은 수행 자원을 사용하기 때문이다. 60 frame 갱신 프로그램에서 10,000 객체가 각각 20번씩 호출 될 때, 초당 12,000,000번 호출 되는데, 바인딩 함수 호출만으로, 프레임 하락이 생긴다. 그러므로 이벤트 발생에 따른 콜백등에 사용하는게 제일 좋다. 테스트 환경 VS2012, Release이며, 결과는 32bit 실행 파일 테스트 코드 /* Boost Lib */ #include #include #include /* Stand Lib */ #include long long ..
항목 13 에선 StackImpl 이 protected 를 나타내어 private 상속을 통하여 Stack 을 구현했다면, 이번에는 /?????/ 이 부분이 public 인터페이스일 경우, HAS-A 관계를 이용하여 Stack 을 구현해 보자. 코드 template class StackImpl { /* ? ? ? ? ? */ StackImpl( size_t size = 0 ); ~StackImpl(); void swap( StackImpl& other ) throw(); T* v_; size_t vsize_; size_t vused_; private: // private and undefined: 복사가 허용되지 않음 StackImpl( const StackImpl& ); StackImpl& operat..
예제코드 template class StackImpl { /* ? ? ? ? ? */ StackImpl( size_t size = 0 ); ~StackImpl(); void swap( StackImpl& other ) throw(); T* v_; size_t vsize_; size_t vused_; private: // private and undefined: 복사가 허용되지 않음 StackImpl( const StackImpl& ); StackImpl& operator=( const StackImpl& ); }; template class Stack : private StackImpl { public: Stack( size_t size = 0 ); ~Stack(); Stack( const Stack& ..
http://www.gamedev.net/community/forums/topic.asp?topic_id=453957 http://www.sysbug.com/bbs/board/view.php?no=11&mode=&list_num=&page=2&page_count_frist=1&select=&keyword=&brdCode=board2 http://fallsky4.springnote.com/pages/1333674 이 모든 경우를 종합해서 해결 했다. 쉽게 말한다면, WSARecv 의 5번째 파라미터인 플래그는 DWORD 의 포인터 만을 받아 들인다. 편하게 하기 위해서 상수 0 이나, NULL 로 주었을 때 10014 에러 코드를 반환 하게 된다.
Bind 는 임의의 함수 포인터나 함수에 국한되지 않고, 함수 객체도 bind 할 수 있게 해 준다. 이 함수 객체를 바인드 할 경우 operator() 의 리턴 타입을 명시적으로 bind 함수에 알려 줘야 한다. #include struct F { int operator()(int a, int b) { return a - b; } bool operator()(long a, long b) { return a == b; } }; int main( void ) { F f; int x = 104; bind(f, _1, _1)(x);// f(x, x), i.e. zero return 0; } 이 처럼 bind(...) 을 지정해 주어야 bind 함수는 객체를 생성 할 수 있게 된다. 여기서 유심히 봐야 할 부분..
최근댓글