gpt4 book ai didi

c++ - 在第一个参数上部分特化模板

转载 作者:行者123 更新时间:2023-11-30 04:49:16 24 4
gpt4 key购买 nike

我今天尝试做一些事情,但我很惊讶地发现它没有用。我有一个将类型和值作为参数的模板。我想专注于类型参数,但让值参数保持打开状态。像这样

template <class T = void, bool Enabled = false>
struct seFoo {};

template <bool Enabled>
struct seFoo<int, Enabled> {};

// Doesn't work :(
seFoo<false> foo;

但是,这会导致模板参数太少的编译错误。看起来实例化必须与非专用模板的签名相匹配,编译器才会查看部分专用化。

有没有办法让它工作?

如果这种方法根本不可能,我对替代方法很感兴趣。

显然我不是唯一对此感到惊讶的人。 This article到最后犯了同样的错误。

最佳答案

不,你真的不能这样做。

请注意,类模板部分特化不是您可以以任何方式直接使用的东西。它的唯一功能是,当您尝试正常使用主模板时,如果偏特化与您的模板参数匹配并且是任何其他显式/偏特化中的最佳匹配,则使用偏特化而不是用于生成特定类类型定义的主模板。

在某些情况下,您可以使用默认模板参数、为模板参数定义您自己的含义或其他类似技巧来做一些事情。但是没有办法让一个模板可以将类型或值作为其第一个模板参数,并且您不能在同一范围内拥有两个具有相同名称的类模板或别名模板。

关于c++ - 在第一个参数上部分特化模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55506230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com