이 포스트의 목적
- 일반화 함수자(함수 객체)를 구현하는 방법을 알아 본다.
이 포스트의 준비물
- VMware player 3.1.2
- Debian 5 64bit
- g++ 4.3.2
- vim 7.1.314
- project.vim
- make
참조 서적
- 안드레 알렉산드레스쿠 저. Modern C++ Design. 이기형 역.
Addiston-Wesley. 인포북. 초판 2003.07.30. page(190~ 199)
내용
내일 정리한다는게 한달을 훌쩍 넘어갔다. 바쁘다는건 핑계고 어려워서 멈추고 하다가 멈추고를 반복했기 때문이다. 5장 4에서 기본 틀이 있는데, 여기에 정의를 붙여야 한다.
먼저 기본틀에서 함수자의 리턴타입과 인자타입을 정할 수 있으므로. 이제 함수자가 호출할 수 있는 "호출 가능 객체"를 멤버 변수로 저장해 두어야 한다. 그래야 해당 변수로 함수를 호출할 수 있기 때문이다.
작업하기에 앞서 어떻게 변수로 저장할 수 있는지 테스트를 하기 위해서 다음과 같은 함수를 보고, 이해하자.
- tiny_functor_test 함수의 인자가 템플릿이기 때문에, 함수든, 객체형 함수든 상관없이 받을 수 있다. 이때 템플릿 타입 T로 어떤 타입인지 알수 있다.
- T로 객체를 정의할 수 있기 때문에, tiny_functor_test 내부에 save_func 변수를 만들수 있었고, save_func() 로 호출 할수 있었다.
위의 간단한 테스트를 통해서, 템플릿 파라미터를 이용해 타입을 얻었다. 그러므로, 함수자의 생성자가 템플릿 생성자이면 된다. 그러면 이것을 기반으로 하나씩 정의해 보자.
- 일반 함수, 객체형 함수(함수자), 멤버 함수를 변수로 만들어야 하는데, 멤버 함수는 좀 까다로운게 있으니, 잠시 생략한다. 일반 함수와 객체형 함수(함수자)를 변수로 만들려면, 템플릿 타입이여야 한다.
- 아뿔사, 지역변수에선 저장할 수 있으나, 멤버 변수로 저장할 수 없다. 그래서 한번 더 이 템플릿 타입을 포장하고, 이 포장된 타입을 저장할수 있는 도움 클래스가 필요하다.
이 도움 클래스에 넘겨줄 수 있는 타입정보로는 "호출 가능한 객체의 타입(typename F)과 객체형 함수자(function_object) 를 넘겨줄 수 있다. 이 때 객체형 함수자는 내부적으로 리턴 타입, 파라미터 타입들을 포함하고 있으므로, 이 정보들도 같이 넘겨 줄수 있다.
이것으로 멤버 함수를 제외한 "함수를 호출 가능한 객체"를 함수자로 만들 수 있는 코드가 만들어 졌다.
여담
- 설명 부분이 너무 부족하다.
'책 정리 > Modern C++ Design' 카테고리의 다른 글
6장, 싱글턴(Singleton)의 구현 - 3. 마이어스 싱글턴(Singleton)의 한계와 개선점 (0) | 2010.12.03 |
---|---|
6장, 싱글턴(Singleton)의 구현 - 2. 싱글턴(Singleton)의 기초적인 구현 (0) | 2010.11.30 |
6장, 싱글턴(Singleton)의 구현 - 1. 싱글턴(Singleton)이란 무엇인가? (0) | 2010.11.30 |
5장, 일반화 함수자(함수 객체) - 7. 총평 (0) | 2010.11.28 |
5장, 일반화 함수자(함수 객체) - 6, 일반화 함수자 구현하기 - 멤버 함수 포함시키기 (0) | 2010.11.28 |
5장, 일반화 함수자(함수 객체) - 4, 일반화 함수자 구현하기 (0) | 2010.10.13 |
5장, 일반화 함수자(함수 객체) - 3, C++의 호출 가능한 객체들 (0) | 2010.10.09 |
5장, 일반화 함수자(함수 객체)와 Command 패턴 : 2 - Command 패턴은 무엇인가? (0) | 2010.09.29 |
5장, 일반화 함수자(함수 객체)와 Command 패턴 : 1 - 일반화 함수자는 무엇인가? (0) | 2010.09.29 |
4장, 작은 객체에 대한 메모리 할당 : 6 - 더 이야기 하고 싶은 메모리 풀 (1) | 2010.09.26 |
최근댓글