export와 클래스 템플릿
템플릿들은 클래스와 멤버 함수 정의가 아니다
클래스와 멤버 함수 정의를 생성하는 방법을 컴파일러에게 알려 주는 지시문이다
템플릿들은 함수가 아니기 때문에 개별적으로 컴파일할 수 없다
따라서 특별한 구체화 요구들과 함께 결함하여 사용해야 한다
보통 모든 템플릿 관련 정보를 헤더 파일에 집어 넣고, 그 템플릿들을 사용하는 파일에 그 헤터 파일을 포함시키는 것이다
하지만 위와 같은 방법은 코드가 깔끔해보이지 않을 수 있다
템플릿이 아닌 클래스의 경우 cpp 파일을 따로 나누어 함수 정의를 구현한다
템플릿 클래스의 경우는 export 키워드를 이용하여 그것이 가능하다
... export template <typename T> class nameclass { ... }; ...
주의할 점은 export 키워드를 지원하지 않는 컴파일러에서 템플릿 멤버 함수들을 별개의 구현 파일에 넣으면 바르게 동작하지 않는다
그렇기에 권장되는 방법은 아니다
//header.h template <typename T> class CTP { ... } //headerTPs.h #include <header.h> template <typename T> CTP<T>(...) { ... } template <typename T> CTP<T>::method1(...) { ... } ... //test.cpp #include <headerTPs.h> int main() { ... }
이럴 때에는 헤더 파일을 둘로 나누면 가능하다
위 코드와 같이 클래스 템플릿 헤더 파일(1)과 템플릿 멤버 함수를 구현한 헤더 파일(2)로 나누면 코드가 깔끔해진다
헤더 파일(2)에 헤더 파일(1)은 선언해주고 템플릿들을 사용하는 파일에 헤더 파일(2)를 포함시키면 된다
inline 메소드
인라인 함수들은 내부 링크를 가진다
따라서 함수 정의가 그 함수를 사용하는 파일 안에 들어 있어야 한다
인라인 정의들이 헤더 파일에 있다면 그 정의를 사용하는 파일에 헤더 파일을 포함시키는 것으로 해결된다
inline 키워드를 제거하여 그 함수들이 외부 링크를 갖게 한다면 별개의 구현 파일에 넣을 수도 있다
320x100
'Programming Language > C/C++' 카테고리의 다른 글
[WinAPI] "const char *" 형식의 인수가 "LPCWSTR" 형식의 매개 변수와 호환되지 않습니다 (0) | 2017.08.06 |
---|---|
[C++] 기억 공간 유형 5가지 요약 (0) | 2017.07.19 |
[C/C++] char[] 문자열 초기화시 주의할 점 (0) | 2017.06.15 |
[C/C++] 난수 생성하기, rand(), srand() (0) | 2017.06.02 |
[C/C++] 한글 출력 오류, 유니코드, MBCS, 국제화 (3) | 2017.06.01 |