C++ 기초 책을 보다 보면, 템플릿에 대해서 10장 분량으로 설명만 하고 넘어간다. 그도 그럴것이 방대한 템플릿에 대해서 자세히 설명 할려면 출판사와 저자가 책을 두권 낼지 세권 낼지 스타 한판을 해야 되기 때문이다.

그래서 다른 책들에는 클래스 템플릿의 가상 멤버 함수에 대해 언급하고 있지 않는다.( .. effective, excetional 에 없네; ㅋㅋ 비야네 책에서도 못 찾겠다.) 당연한 것이라서 그럴 수도 있다.

그 당연한 것이 무엇일까?
바로 클래스 템플릿의 가상 멤버 함수는 파라미터화 할 수 없다. 즉, 가상 멤버 함수 템플릿은 존재 하지 못한다는 것이다.

왜 일까?
현재의 C++ 에서 가상 멤버 함수의 경우, 가상 테이블의 1개의 레코드를 사용 한다. 그래서 컴파일 될 때 몇개의 가상 함수가 있는지 체크하여 그 갯수 만큼의 레코드를 갖은 고정된 크기의 테이블을 생성한다.

하지만 가상 멤버 함수 템플릿의 경우, 컴파일 타임에 몇개의 가상 멤버 함수가 있는지 파악하지 못해 테이블을 생성하지 못하게 되고 컴파일 에러를 내게 된다.

몇개인지 파악해서 만들면 되지 되잖아.
라고 생각했다면 맞는 생각이다. 하지만 이것은 컴파일러 제작자의 삶을 고달프게 해서인지 지원하지 못하고 있으며, 앞으로도 지원해 줄지 안줄지 모르겠다. 어쩌면 컴파일러 제자자에게 찾아가 스타한판 내기로 정할 수도 있지 않을까 한다. : )

자 다음 코드를 컴파일 해보자.

만약 컴파일러에서 에러없이 잘 된다면, .. 부럽다. 진심으로 부럽다. .. 그 이쁜 컴파일러를 나도 좀 소개시켜 주오!

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