이번 항목은 제네릭 프로그래밍에 있어, 템플릿의 사용은 이렇게 해 주어야 한다 는 것을 말하는 항목이다.바로 질문 넘어가서, 파악해 보도록 하자.

질문 1. "C++ 템플릿은 컴파일 시점 다형성을 제공한다"라는 문장을 설명하라.

.. 런타임 다형성을 안다면, 컴파일 다형성을 이해하기 쉬울 것이다. 런타임 다형성은 상속과 "virtual" 을 이용해, 런타임 중 객체가 상속 상태에 따라 다양하게 .. 말이 어렵잖아.

코드로 봐 보자.

요 코드가 바로 런타임 타임 다형성이다. 그렇다면, 컴파일 타임 다형성은 무엇인가? 위의 코드처럼 컴파일 타임에 다형성을 제공해 주는 것을 말하는데, 코드를 봐 보자.

이것이 바로 컴파일 타임 다형성이다. 런타임과 컴파일 다형성의 차이는 성능과, 그 사용 제약에 있는데, 컴파일 타임 다형성이 성능이 더 좋고, 그 사용 제약이 더 약하다는 특징을 가지고 있지만, 설계하기가 어려운 단점이 있다. 런타임 다형성은, .. 상속이라는 제약과 한번 더 포인터를 타고 내려가야 한다는 연산이 깔리는 단점이 있지만, 보다 더 세밀한 제어가 가능하다는 장점이 있다.

상황에 맞는 것을 골라 써야 할 것이다.


질문 2. 다음 함수의 의미는 무엇이며, 왜 템플릿 매개변수를 두개씩이나 받아야 하는지 설명하라.

우선 함수 .

.. 이 함수는 placement new 를 이용하여, p 위치에 value 의 값으로, 복사 생성자를 호출하여, 덮어씌워 값을 초기화 해주는 함수이다.

그렇다면 왜 템플릿 매개변수를 두개씩이나 받아야 했을까? 아래 코드를 컴파일 해보자.

14 라인에서 컴파일 에러를 벹어 내고 있는데, 그 이유가 템플릿 매개변수 T1의 모호성 때문이다. 첫번째 인자에는 double 형으로 추론되고, 두번째 인자에는 int형으로 추론되니, T1 이 두개의 타입중 무엇을 선택해야 하는지, 컴파일러가 모호하다고 에러를 벹어 내는 것이다.

그래서 템플릿 매개변수를 두개 주어, 각각 추론된 타입으로 호출 되게 하는 것이다. 문제가 생길 수 있는 요지는 T1 의 복사 생성자가 T2를 받는게 있느냐 없느냐에 따라 컴파일 타임 에러를 벹어 내어 주니 좋다.

여기서 좀 더 이 함수를 생각해 보면, 좀 위험한 코드이기도 하다. 이 것은 상속 관계를 가진 객체를 초기화 하는데 있어, ... 좀 위험할 수 있기 때문이다. ^^; 이렇게 하기 보다, 객체를 초기화 해주는 함수를 제공해 주는것이 더 보기 좋을 듯 싶다.


총평

템플릿에 대해서 더 자세히 알아야 할 필요성을 느껴, C++ Template Metaprogramming  책을 샀지만, 이 책은, ... 템플릿 설명이 아닌, 메타프로그래밍 책이다. .. 기초 서적 한개를 사야할 필요성을 느낀다..(학원 에서 살수 있게 한번 추진해 봐야겠다.)

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기