19
template <size_t size, typename ...Params> 
void doStuff(Params...) { 
} 

template <> 
void doStuff<size_t(1), int, bool>(int, bool) { 

} 

int main(int, char**) { 
    doStuff<1,int,bool>(1, false); 
    return 0; 
} 

두 번째 doStuff 선언은 error: template-id ‘doStuff<1u, int, bool>’ for ‘void doStuff(int, bool)’ does not match any template declaration을 제공하지만 첫 번째 선언을 가변 템플릿 인수와 명확하게 일치시킵니다.가변 템플릿을 사용한 템플릿 전문

가변 특성 템플릿을 특수화하는 방법은 무엇입니까?

답변

12

구문이 정확합니다 (afaik 및 clang ++에서 허용 함). 그러나 컴파일러가 아직 up2date가 아닐 수도 있습니다.

gcc를 사용하는 경우 그 가변적 인 템플릿 지원은 매우 불완전하며 매우 최신 svn 버전도 아직 전문화를 지원하지 않습니다 (이는 최첨단 기술을 사용하는 경우와 슬프게도 gcc 만 구현하면됩니다. 초기의 불완전한 가변성 템플릿 제안서는 그 이후로 많이 유지하지 못했지만 clang은 꽤 늦게 시작되었지만 꽤 완료되었습니다.)

+0

저는 gcc 4.5.2를 사용합니다. 귀하의 답변을 주셔서 감사합니다 (지금 템플릿 오버로딩을 사용하고 있습니다). – coyotte508

+0

4.6.1과 동일합니다. 즉 위 버전은 해당 버전에서 지원되지 않습니다 ... – Nim

+0

또는 템플릿 <..> 구조체 Do (static void Stuff (..) {}};')에 함수를 래핑 할 수 있습니다. –