使用可变参数模板进行模板专业化

发布于 2024-12-09 20:11:30 字数 440 浏览 1 评论 0原文

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)' 与任何模板声明都不匹配,但它显然与带有可变模板参数的第一个声明匹配。

如何专门化可变参数模板?

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;
}

This doesn't compile, the second doStuff declaration gives me error: template-id ‘doStuff<1u, int, bool>’ for ‘void doStuff(int, bool)’ does not match any template declaration but it clearly matches the first declaration with variadic template arguments.

How to specialize variadic templates?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

极致的悲 2024-12-16 20:11:30

语法是正确的(据我所知,clang++ 接受它),但您的编译器可能还没有更新。

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

The syntax is correct (afaik, and clang++ accepts it), but your compiler is probably just not up2date yet.

If you use gcc, its variadic template support is quite incomplete, and even very recent svn versions don't support specialization yet (That is just how it is when you use bleeding edge technology, and sadly gcc implemented only a very early incomplete variadic template proposal and since then didn't keep up much, while clang started pretty late, but got pretty complete)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文