비공개
C++에서 템플릿의 선언/정의부를 h/cpp 처럼 분리하기
닭꽝
2011. 8. 9. 11:27
기존 프로그래밍 작성 관행은
class의 경우 선언부는 .h file 에 정의부는 .cpp 파일에 작성하였다.
그러나 Template의 경우 통상적으로 그렇게 구분해서 사용할 수가 없고, 선언과 정의를 하나의 파일에 작성해야한다.
또, 보통 그렇게 사용한다. 다음처럼...
그러나 방법이 아주 없는것은 아닌데... 바로 .inl 파일을 사용하는 방법이다.
먼저, .inl 파일의 용도는 인라인 함수들은 헤더 파일에 기록하지 않고 인라인 함수용 파일을 따로 만들어
작성하고 관리 하기 위해 쓰인다. 그 때 사용하는 파일 확장자가 .inl 이다.
자 그럼! 분리해보자.
다음은 정의부이다.
이렇게 쓰면 된다. ㅎㅎㅎ
참고로, 이렇게 하는 방법은 앞서 거론했다싶이 일반적이지 않지만
일부 라이브러리나 3D 상용엔진에서는 저렇게 쓰기도 한다고 한다.
class의 경우 선언부는 .h file 에 정의부는 .cpp 파일에 작성하였다.
그러나 Template의 경우 통상적으로 그렇게 구분해서 사용할 수가 없고, 선언과 정의를 하나의 파일에 작성해야한다.
또, 보통 그렇게 사용한다. 다음처럼...
// 선언부
template<typename T>
class Queue
{
public:
// 초기화 한다.
void Clear();
public :
T m_Data[100];
};
// 정의부
template < typename T >
void Queue<T>::Clear()
{
memset( m_Data, 0, sizeof(T)*100);
} |
그러나 방법이 아주 없는것은 아닌데... 바로 .inl 파일을 사용하는 방법이다.
먼저, .inl 파일의 용도는 인라인 함수들은 헤더 파일에 기록하지 않고 인라인 함수용 파일을 따로 만들어
작성하고 관리 하기 위해 쓰인다. 그 때 사용하는 파일 확장자가 .inl 이다.
자 그럼! 분리해보자.
// 선언부
template<typename T>
class Queue
{
public:
// 초기화 한다.
void Clear();
public :
T m_Data[100];
};
// include inline file
#include "queue.inl" |
다음은 정의부이다.
// queue.inl 파일
// 정의부
template < typename T >
void Queue<T>::Clear()
{
memset( m_Data, 0, sizeof(T)*100);
} |
이렇게 쓰면 된다. ㅎㅎㅎ
참고로, 이렇게 하는 방법은 앞서 거론했다싶이 일반적이지 않지만
일부 라이브러리나 3D 상용엔진에서는 저렇게 쓰기도 한다고 한다.