Extern 템플릿을 사용하여 템플릿 인스턴스화 최적화
C 11에서 extern 템플릿은 중복 인스턴스화를 방지하는 데 사용할 수 있는 강력한 키워드입니다. 템플릿, 특히 여러 번역 단위(예: .cpp 파일)가 템플릿을 포함하는 동일한 헤더 파일을 포함할 수 있는 경우
Extern 템플릿의 개념
Extern 템플릿은 본질적으로 현재 번역 단위가 포함된 템플릿에 선언되어 있더라도 특정 템플릿을 인스턴스화해서는 안 된다는 것을 컴파일러에 알립니다. 헤더. 이는 템플릿이 동일한 프로젝트의 다른 번역 단위에서 인스턴스화된다는 것을 알고 있을 때 유용합니다.
함수 템플릿 사용
함수 템플릿의 경우 extern 템플릿 선언은 다음과 같이 사용할 수 있습니다:
#include "header.h" extern template void f<T>(); // Avoid instantiation in this translation unit
이는 f 템플릿이 프로젝트의 다른 곳에서 정의되며 현재 파일에서 인스턴스화됩니다.
클래스 템플릿 사용법
마찬가지로 클래스 템플릿의 경우 외부 템플릿 선언은 다음 형식을 취합니다.
#include "header.h" extern template class foo<int>; // Avoid instantiation in this translation unit
이것은 foo 템플릿 클래스가 이 특정 번역에서 인스턴스화되지 않도록 보장합니다. unit.
최적화 애플리케이션
다음 시나리오를 고려하십시오.
// header.h template<typename T> void f();
// source1.cpp #include "header.h" void f<int>();
// source2.cpp #include "header.h" void f<string>();
extern 템플릿이 없으면 source1.cpp와 source2.cpp는 f 템플릿을 인스턴스화하므로 여러 정의가 발생하고 컴파일 시간이 낭비됩니다. 파일 중 하나에서 extern 템플릿을 사용하면 이러한 중복성을 피할 수 있습니다.
// source1.cpp #include "header.h" void f<int>();
// source2.cpp #include "header.h" extern template void f<int>(); void f<string>();
핵심 사항
위 내용은 Extern 템플릿은 C에서 템플릿 인스턴스화를 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!