extern 템플릿은 개발자가 특정 컴파일 단위에서 템플릿의 인스턴스화를 방지할 수 있게 해주는 강력한 C 11 키워드입니다. . 이는 여러 소스 파일이 서로 다른 매개변수를 사용하여 동일한 템플릿을 인스턴스화하여 코드가 중복되고 컴파일 시간이 늘어나는 대규모 코드베이스로 작업할 때 특히 유용할 수 있습니다.
함수 템플릿의 경우, extern 템플릿은 함수가 다른 곳에서 인스턴스화될 것이라는 것을 알고 있을 때 컴파일러가 특정 템플릿을 인스턴스화하지 않도록 강제하는 데 사용될 수 있습니다. 다음 예를 고려하십시오.
// header.h template<typename T> void ReallyBigFunction() { // Body }
// source1.cpp #include "header.h" void something1() { ReallyBigFunction<int>(); }
// source2.cpp #include "header.h" extern template void ReallyBigFunction<int>(); void something2() { ReallyBigFunction<int>(); }
extern 템플릿이 없으면 컴파일러는 RealBigFunction
source1.o void something1() void ReallyBigFunction<int>() // Compiled first time source2.o void something2() void ReallyBigFunction<int>() // Compiled second time
이러한 파일을 함께 연결하면 RealBigFunction
이 문제를 방지하려면 source2.cpp에서 extern 템플릿을 사용할 수 있습니다.
// source2.cpp #include "header.h" extern template void ReallyBigFunction<int>(); void something2() { ReallyBigFunction<int>(); }
이렇게 하면 다음과 같은 개체 파일이 생성됩니다.
source1.o void something1() void ReallyBigFunction<int>() // Compiled just one time source2.o void something2() // No ReallyBigFunction<int> here because of the extern
이러한 개체 파일이 연결되면 두 번째 개체 파일은 첫 번째 개체 파일의 기호를 사용하여 중복 코드를 피하고 코드를 줄입니다.
외부 템플릿을 클래스 템플릿과 함께 사용하여 특정 클래스 멤버의 인스턴스화를 방지할 수도 있습니다. 예를 들면 다음과 같습니다.
// header.h template<typename T> class Foo { public: T f(); };
// source1.cpp #include "header.h" Foo<int> foo1;
// source2.cpp #include "header.h" extern template class Foo<int>; Foo<int> foo2;
extern 템플릿이 없으면 컴파일러는 Foo
extern 템플릿은 C 11 프로젝트에서 중복 코드를 피하고 컴파일 시간을 줄이는 데 유용한 도구입니다. 불필요한 템플릿 인스턴스화를 방지하기 위해 선택적으로 extern 템플릿을 사용함으로써 개발자는 코드 성능을 최적화할 수 있습니다.
위 내용은 C 11의 'extern template'은 어떻게 중복 템플릿 인스턴스화를 방지하고 컴파일 시간을 단축할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!