템플릿 클래스 정의와 구현 분리.

C++로 처음 프로젝트를 할 때 가장 힘들었던 것 중에 하나가 템플릿 관련 에러였다.

가장 짜증났었던 에러중 하나는 템플릿 클래스의 구현분리 때문에 생겼다. 하아...link error 2019였나...

이 에러는 정의된 헤더 밑에 구현 파일을 포함시키고, 구현 파일은 빌드에서 제외시킴으로서 해결이 가능하다.(간략히 말하자면 따로 컴파일이 되어 있으면, 인스턴스화가 될 때 템플릿 정의를 알지 못하므로 문제가 생기기 때문.)

헤더파일(정의 파일)

//Name.h template <typename T> class Name { public: int exam_func(T ex); other contents.. }; #include Name.hpp

구현파일(exclude build)

//Name.hpp template <typename T> int Name<T>::exam_func(T ex) { contents.. } other contents..

여담으로 구현 파일 확장자를 .cpp이 아니라 .hpp라고 해놓은 것은 템플릿 구현 파일임을 표시하기 위해서이고, .tpp라고도 사용한다.

나 같은 경우는 .tpp는 IDE에서 cpp 하이라이트, 문법 체크, 인텔리전스가 작동하지 않았기 때문에 작동이 잘 되는 .hpp를 사용하는 중이다.