> 백엔드 개발 > C++ > Extern 템플릿은 C에서 템플릿 인스턴스화를 어떻게 최적화할 수 있습니까?

Extern 템플릿은 C에서 템플릿 인스턴스화를 어떻게 최적화할 수 있습니까?

Patricia Arquette
풀어 주다: 2024-12-12 21:52:14
원래의
171명이 탐색했습니다.

How Can Extern Templates Optimize Template Instantiation in C  ?

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 템플릿을 사용하세요. 템플릿이 프로젝트의 다른 곳에서 인스턴스화될 것이라고 확신합니다.
  • 두 기능 템플릿 모두에 적용됩니다. 클래스 템플릿, 템플릿 멤버 함수도 포함됩니다.
  • extern 템플릿을 사용하면 특히 크거나 자주 사용되는 템플릿으로 작업할 때 컴파일 시간을 크게 줄이고 개체 파일 크기를 최적화할 수 있습니다.

위 내용은 Extern 템플릿은 C에서 템플릿 인스턴스화를 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿