주의 : 공부하면서 정리한 내용이므로 오류가 있을 수 있습니다.


실습 과제 2-2 :


boost::polymorphic_downcast 함수 템플릿은 포인터를 다형적 객체로 하향 변환하기 위한 static_cast 의 점검 버전을 구현한다.



릴리스 모드에서는 assert 가 사라지며, polymorphic_downcast 는 보통의 static_cast 만큼이나 효율적이 될 수 있다. 형식 특질 수단들을 이용해서, 이 템플릿을 포인터와 참조 인수 모두를 허용하도록 구현하라.





풀이 : 


이 문제는 함수 template 의 특수화에 대한 부분에서 시작한다. 문제에서 포인터와 참조 인수를 모두 허용하도록 하라고 했기 때문에, 이 문제를 풀 때 처음에는 아무 생각없이 함수 template 을 부분 특수화할 것이다.


하지만 함수 template 은 부분 특수화를 할 수 없다. 그러므로 overloading 을 통해 pointer 버전과 reference 버전을 만들어야 한다. 나머지는 기존에 우리가 했듯이 template 부분 특수화를 사용해서 처리하면 된다.


여기에서 한 가지 특이한 점은 boost::remove_reference 와 boost::remove_pointer 를 호출한다는 것이다. Target 은 pointer 나 reference 인 복합형식인 반면에 Source 는 복합 형식이 아니기 때문에, 두 형식을 가지고 boost::is_base_and_derived 를 호출하면 반드시 false 를 반환하게 된다. 그러므로 pointer 나 reference 를 복합형식에서 벗겨 내야 하는 것이다.


아래 코드를 잘 살펴 보면 크게 어려운 부분은 없을 것이다.



다른 사람들의 풀이를 보려면 다음 link 를 참조하라.


http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?CPPTM_Answers_-_Exercise_2-2


+ Recent posts