템플릿 인스턴스화를 피하기 위해 extern 템플릿 사용
템플릿 인스턴스화는 C 프로그래밍에서 중요한 단계로, 특정 템플릿 인스턴스는 컴파일 타임에 생성됩니다. . 특정 시나리오에서는 컴파일 시간을 최적화하고 중복 정의를 피하기 위해 템플릿 인스턴스화를 제어해야 합니다. 여기서 extern 템플릿 키워드가 작용합니다.
함수 템플릿용 외부 템플릿
함수 템플릿과 함께 사용할 경우 extern 템플릿은 컴파일러에게 지정된 템플릿을 인스턴스화하지 않도록 지시합니다. 현재 번역 단위 내의 템플릿입니다. 이는 해당 템플릿의 인스턴스화가 프로그램의 다른 곳에서 발견될 것이라는 신호입니다. 이는 여러 소스 파일이 동일한 매개변수를 사용하여 동일한 템플릿을 인스턴스화하여 컴파일러가 삭제해야 하는 여러 정의로 이어지는 시나리오에서 특히 유용합니다.
예:
다음을 고려하세요. 다음 코드 조각:
// header.h template <typename T> void f() { /* Body */} // source1.cpp #include "header.h" void something1() { f<int>(); } // source2.cpp #include "header.h" extern template void f<int>(); void something2() { f<int>(); }
이 경우 source2.cpp의 extern 템플릿은 다음을 알려줍니다. 컴파일러는 f
클래스 템플릿용 외부 템플릿
함수 템플릿과 유사하게 extern 템플릿도 사용할 수 있습니다. 클래스 템플릿을 사용합니다. 이는 동일한 매개변수를 사용하여 템플릿 클래스의 여러 인스턴스화를 피하기 위해 수행됩니다.
예:
// header.h template <typename T> class MyClass { /* Body */} // source1.cpp #include "header.h" MyClass<int> obj1; // source2.cpp #include "header.h" extern template class MyClass<int>; MyClass<int> obj2;
여기서 source2.cpp의 extern 템플릿은 다음을 보장합니다. MyClass
외부 템플릿 사용 지침
위 내용은 C에서 '외부 템플릿'을 사용하여 중복 템플릿 인스턴스화를 방지할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!