c++ 具有可变模板的模板专业化

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声明给我错误:template-id’doStuff< 1u,int,bool>‘for’void doStuff(int,bool)’不匹配任何模板声明,但它明确匹配第一个声明与可变模板参数。

如何专门化可变模板?

语法是正确的(afaik和clang接受它),但你的编译器可能还没有up2date。

如果你使用gcc,它的可变模板支持是相当不完整的,即使是最近的svn版本也不支持专业化(这就是当你使用流行边缘技术的时候,可悲的是,gcc仅实现了一个非常早期的不完全变体模板建议,从那时起,并没有太大的差距,而cl ang开始很晚,但是相当完整)

http://stackoverflow.com/questions/7767202/template-specialization-with-variadic-templates

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c++ 具有可变模板的模板专业化