왜 C ++ 템플릿은 헤더 파일을 달성 할 수 있는가?

정의하고, 템플릿 클래스가 동일한 파일에 있어야합니다 일반적으로 헤더 파일을 구현, 컴파일러는 확장 된 템플릿을 달성하기 위해 템플릿을 볼 수 있습니다.

때문에 템플릿 초기화, 컴파일러는 템플릿의 매개 변수를 기반으로 새 클래스를 만듭니다. 예를 들면 :

푸 {templatestruct의
T 바,
무효 해봐요 (T의 PARAM) {에 / *를 사용하여 재료 T /} 할};
// 어딘가에 통화 당 (A)에
푸 F;
코드를 분석하는 컴파일러는, 새로운 클래스가 생성 등을 이는 등가이다
구조체 FooInt {
INT 바,
보이드 해봐요 (INT의 PARAM) {/ 재료를 수행하여 INT * /}}
컴파일러이 경우 INT 등 그들을 인스턴스화 템플릿 매개 변수를 사용하는 경우, 구현되는 액세스 방법을 필요로 할 때. 구현이 보이지 않는 방문하여 헤더 파일에없는 경우, 그래서 컴파일러는 템플릿을 인스턴스화 할 수 없습니다. 일반적으로 사용되는 방법은 템플릿 파일에서 해당 클래스를 달성하기 위해 헤더 파일 템플릿에 선언되어있다. 그런 다음 파일은 헤더 파일의 끝 부분에 특정 구현이 포함되어 있습니다. 예를 들어,
// Foo.htemplate 구조체 푸 {
무효 해봐요 (T의 PARAM);};

사용법 #include "Foo.tpp"

보이드 푸 :: 해봐요 // (T의 PARAM) Foo.tpptemplate {
// 구현}
따라서, 구현 및 분리 선언은 컴파일러에 액세스.

发布了38 篇原创文章 · 获赞 13 · 访问量 4323

추천

출처blog.csdn.net/YanWenCheng_/article/details/103994668