함수 템플릿에 대한 전문화를 선언하고 나중에 소스 파일에 정의하려고합니다. 다음 예를 고려 : 두 변종 잘 컴파일하지만,템플릿 함수의 특수화 선언 및 정의가 다릅니다. 멤버 및 비회원 함수의 동작이 다릅니다.
.hpp
// approach #1
template <typename T> const char *GetTypeName();
template <> const char *GetTypeName<int>();
// approach #2
template <typename T> class TypeName {static const char *Get();};
template <> const char *TypeName<int>::Get();
.cpp
// approach #1
template <> const char *GetTypeName<int>()
{
return "int"
}
// approach #2
template <> const char *TypeName<int>::Get()
{
return "int"
}
MSVC 2012 년 (CTP는 하지 설치됩니다) 비회원 변형 (# 1) 링커 오류를 일으킨다 (해결되지 않은 외부, blah). 정상적인 행동입니까? MSVC 특정? 컴파일러 버그? CTP에서 수정 되었습니까?
수정
나는 특수 버전 만 사용하고 있습니다. 그것들은 헤더에서 선언되고 소스에서 정의됩니다. 이 접근 방식은 구성원에 대해서는 작동하지만 독립 실행 형 기능에는 작동하지 않습니다.
편집 2
흠 ... 내가 집에서 (동일한 MSVC 설치, 아니 CTP)을 같은 스냅 샷을 구축하기 위해 노력하고있어, 그것이 문제없이 연결합니다. 로컬 버그 또는 손상된 설치와 같습니다.
되지 않은 외부? 같은 DLL 또는 다른 DLL에서 사용합니까? –
@JamesKanze 비회원 전문화를위한 확인되지 않은 외부. 나는 전용 버전만을 사용하고 있습니다. 독립 실행 형 응용 프로그램, DLL 없음. –
그리고 전문화 된 구현의 소스 파일은 프로젝트의 일부입니까? –