비공개2011. 8. 9. 11:27
기존 프로그래밍 작성 관행은

class의 경우 선언부는 .h file 에 정의부는 .cpp 파일에 작성하였다.

그러나 Template의 경우 통상적으로 그렇게 구분해서 사용할 수가 없고, 선언과 정의를 하나의 파일에 작성해야한다. 

또, 보통 그렇게 사용한다. 다음처럼...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// 선언부
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 이다.

자 그럼! 분리해보자.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 선언부
template<typename T> 
class Queue
{
public:

	// 초기화 한다.
	void Clear();

public :
	T m_Data[100];

};

// include inline file
#include "queue.inl"


다음은 정의부이다.

 
1
2
3
4
5
6
7
// queue.inl 파일
// 정의부
template < typename T > 
void Queue<T>::Clear()
{
	memset( m_Data, 0, sizeof(T)*100);
}


이렇게 쓰면 된다. ㅎㅎㅎ
 

참고로, 이렇게 하는 방법은 앞서 거론했다싶이 일반적이지 않지만
일부 라이브러리나 3D 상용엔진에서는 저렇게 쓰기도 한다고 한다.
 
Posted by 닭꽝