c++ - 具有可变参数模板的模板特化

标签 c++ templates c++11 template-specialization variadic-templates

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但它显然与可变参数模板参数的第一个声明相匹配。

如何特化可变参数模板?

最佳答案

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

如果你使用 gcc,它的可变参数模板支持是相当不完整的,甚至最近的 svn 版本还不支持特化(这正是你使用前沿技术时的情况,遗憾的是 gcc 只实现了很早不完整的可变参数模板提案,从那时起就没有跟上多少,而 clang 开始得很晚,但已经很完整了)

关于c++ - 具有可变参数模板的模板特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7767202/

相关文章:

c++ - 不同配置单元之间的注册表符号链接(symbolic link)

c++ - 如何在没有转储的情况下使用 WinDbg 查看某个偏移量处的代码?

c++ - Visual C++ 2010 - 将项目复制到其他计算机后出现多个 Unresolved external 错误

c++ - C++ 中的自动类型推断

c++ - 使用带有多重继承的enable_shared_from_this

c++ - 为什么 shiboken2 会忽略 C++11 风格的回调?

c++ - 从 Objective C 到 C++ 打字头痛

c++ - 在预处理器指令中使用模板参数?

php 代码应该将我的数据库中的内容打印到模板中

c++ - Variadic 模板模板和 SFINAE