<개요> extern template 은 C++11 에서 컴파일 기능 향상을 위해 등장했으며, 같은 템플릿 객체가 2번 이상 인스턴스화 되어 컴파일 시간 및 오브젝트 크기가 증가하는 것을 막아줍니다. |
something1과 something2의 파일이 링크되면 void ReallyBigFunction<int>() 가 삭제되어 컴파일 시간과 객체 크기가 낭비됩니다. ( 다른 cpp 이므로 ) 어짜피 같은 내용으로 작성될 것이라면, 한번만 링크하게 하여 모든곳에서 사용할 수 있게 하자는 것입니다. 그때 사용하는게 template에 대한 extern 키워드인데 이것은 한 template 소스가 다른 곳에서 동일하게 작성되었을때 사용해야 합니다.
두 파일이 함께 링크될때, 두 번째 파일은 첫 번째 파일의 심볼( 선언 )을 사용합니다. 버릴 필요가 없고 객체 크기가 낭비되지 않습니다. 이것은 vector<int>와 같은 템플릿을 여러번 사용할때처럼 한 프로젝트 내에서만 사용해야 합니다. 한 소스만을 놔두고 나머지 소스는 extern으로 처리해야 합니다. 이는 클래스 및 함수를 하나의 함수로, 그리고 템플릿도 작동합니다.
자료형이 다를땐 엄연히 다른 코드입니다. float를 사용하기위해 int를 extern 하셔선 안됩니다. 정보 : https://code-examples.net/ko/q/7c102a |
'C++ > Modern' 카테고리의 다른 글
C++11) std::reference_wrapper (0) | 2019.02.14 |
---|---|
C++11) 사용자 정의 리터럴 (0) | 2019.02.13 |
C++11) std::tuple (0) | 2019.02.10 |
C++11) std::thread 와 관련된 함수, 라이브러리 2 (0) | 2019.02.08 |
C++11) std::thread 와 관련된 함수, 라이브러리 1 (0) | 2019.02.07 |