> 백엔드 개발 > C++ > C에서 '외부 템플릿'을 사용하여 중복 템플릿 인스턴스화를 방지할 수 있는 방법은 무엇입니까?

C에서 '외부 템플릿'을 사용하여 중복 템플릿 인스턴스화를 방지할 수 있는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2024-12-20 20:42:09
원래의
508명이 탐색했습니다.

How Can `extern template` Prevent Redundant Template Instantiation in C  ?

템플릿 인스턴스화를 피하기 위해 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 템플릿 클래스는 한 번만 인스턴스화되므로 중복 정의가 방지됩니다.

외부 템플릿 사용 지침

  • 외부 템플릿의 인스턴스화가 확실한 경우에만 extern 템플릿을 사용하세요. 템플릿은 프로그램의 다른 곳에 존재합니다.
  • 이 기술은 함수 템플릿, 클래스 템플릿, 심지어는 템플릿 멤버 함수.
  • 충돌 가능성을 피하기 위해 일반적으로 모든 템플릿 정의와 인스턴스화를 단일 헤더 파일 내에 유지하는 것이 좋습니다.
  • 템플릿 정의를 중앙 집중화할 수 없는 경우 extern 템플릿을 사용하세요. 템플릿이 사용되는 하나의 소스 파일을 제외하고 모두

위 내용은 C에서 '외부 템플릿'을 사용하여 중복 템플릿 인스턴스화를 방지할 수 있는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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