2010-05-15 2 views
0

클래스 foo에 열거 형 템플릿 매개 변수가 있는데 어떤 이유로 인해 cpp 파일의 ctor의 두 버전에 연결됩니다.상수 템플릿 매개 변수 클래스가 외부로 연결되도록 관리합니다.

enum Enum 
{ 
    bar, 
    baz 
}; 

template <Enum version = bar> 
class foo 
{ 
public: 
    foo(); 
}; 

// CPP File 
#include "foo.hpp" 

foo<bar>::foo() { cout << "bar"; } 
foo<baz>::foo() { cout << "baz"; } 

저는 msvc 2008을 사용하고 있습니다. 표준 동작입니까?
형식 템플릿 매개 변수 만 cpp 파일에 연결할 수 있습니까?

답변

2

귀하는 두 가지 형태의 컨스트럭터를 전문으로 취급합니다. 두 양식을 연결하는 데 왜 놀랍습니까?

+0

아마도 참조되지 않았기 때문일 수 있습니까? – sbi

+0

일반적으로 템플릿 클래스에 링크 할 때 멤버가 cpp 파일에 구현 될 수 없기 때문입니다. –

+0

@sbi : 참조되지 않았다고해서 그것이 제거되어야한다는 것을 의미하지는 않습니다. 컴파일러는 그것을 제거 할 수는 있지만 결코 보장 할 수는 없습니다. @the_drow : 템플릿을 전문화하는 경우 CPP 파일에 멤버를 구현할 수 있습니다. – Goz

관련 문제