클래스 템플릿// 멤버함수의 외부 선언

2019. 5. 12. 13:12ComputerScience/C-C++

클래스 템플릿(Class template)의 멤버 함수를 외부에 선언할 때 다음과 같이 작성한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//classA.h header file
template<typename T>
class A {
.
.
.
    void function(T data){
    .
    .
    }
.
.
}; //클래스 내부 선언
----------------------------------------------------------
template<typename T>
class A {
.
.
.
    void function(T);
.
.
};
 
template<typename T>
void A<T>::function(T data){
.
.
}//외부선언
cs

 

1
2
3
4
5
6
7
8
9
// classA.cpp
#include "classA.h"
 
template<typename T>
void A<T>::function(T data){
.
.
.
}
cs

하지만 위와 같이 함수 선언을 다른 소스에 작성하게 되면 컴파일시 오류가 발생하게 된다.

이 때 2가지 해결책이 있다. 맨처음과 같이 헤더에 함수를 선언하는 방법. 또 하나는 main 함수가 있는 소스에서

 

함수가 정의되어있는 cpp파일을 include하는 것이다. 

 

이렇게 되는 이유는 컴파일러가 컴파일시 선언된 타입으로 클래스를 만들고 선언은 외부에 있어 접근할 방법이 없

 

기 때문이라고 한다.