그것은 불가능합니다. 템플릿을 전문으로 할 때,이 경우 전체 클래스를 의미한다 전체 템플릿을 전문으로한다.
당신은 foo는 내부 템플릿 기능을 할 수 있습니다 템플릿 클래스. 요구하는 것과 정확히 일치하지는 않지만 요구 사항을 충족 할 수 있습니다.
는 업데이트 :
template<typename T> class Foo {
public:
template<typename R> void foo() {printf("This is foo\n");}
template<> void foo<float>() {printf("This is foo<float>\n");}
};
또는 :
template<typename T> class Foo {
public:
template<typename R> void foo() {printf("This is foo\n");}
//template<> void foo<float>() {printf("This is foo<float>\n");}
};
template<> template<> void Foo<float>::foo<float>() {
printf("This is foo<float>\n");
}
과 함께 :
int main(int argc,char * argv[])
{
Foo<int> iFoo;
iFoo.foo<int>();
Foo<float> fFoo;
fFoo.foo<float>();
return 0;
}
를 생성 :
This is foo
This is foo<float>
,536,
foo
을 호출하는 구문은 다소 어색합니다.
난 그냥 두 개의 서로 다른 소스 파일에서 포함 된 헤더 파일에 정의를 붙여; 두 소스 파일에서 특수 및 비 특화 템플릿 클래스의 인스턴스 모두에 대해 Foo() 메서드를 호출했습니다. 모든 것은 g ++로 잘 작동합니다 - 4.4.3. 정확한 링커 오류와 프로젝트의 구조에 대해 좀 더 자세히 설명해 주시겠습니까? – misberner
이렇게하면됩니다. 당신의 문제는 다른 곳에 있어야합니다. 일반적인 템플릿 메커니즘과 헤더 및 링크 문제에 익숙해야합니다. –
[나를위한 작품] (https://ideone.com/IpHd0). –