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,它的variadic模板支持是非常不完整的,即使是最近的svn版本也不支持專門化(這就是當你使用流血邊緣技術時它是如何的,可悲的是gcc只實現了一個非常早期不完整的可變模板提案,並從那時起沒有跟上很多,而鏗鏘開始很晚,但相當完整)

+0

我使用gcc 4.5.2。感謝您的回答(我現在使用模板重載)。 – coyotte508

+0

同樣適用於4.6.1,即在該版本中不支持以上... – Nim

+0

或者,您可以將函數封裝在一個'template <..> struct Do {static void Stuff(..){}};'中。 –