gpt4 book ai didi

c++ - 为什么显式给出的模板参数不能为 “deduced”

转载 作者:行者123 更新时间:2023-12-03 07:07:02 25 4
gpt4 key购买 nike

来自这个问题:
Using enum values in combination with SFINAE
我尝试实现:

enum Specifier
{
One,
Two,
Three
};

template <Specifier, typename UNUSED=void>
struct Foo
{
void Bar(){ std::cout << "Bar default" << std::endl;}
};

template <Specifier s , typename std::enable_if<s == Specifier::Two || s == Specifier::One, int>::type>
struct Foo<s>
{
void Bar(){ std::cout << "Bar Two" << std::endl; }
};


int main()
{
Foo< One >().Bar();
Foo< Two >().Bar();
}
失败:
> main.cpp:130:8: error: template parameters not deducible in partial specialization:
130 | struct Foo<s>
| ^~~~~~
main.cpp:130:8: note: '<anonymous>'
如何解决这个 super 简单的例子?我喜欢SFINAE :-)

最佳答案

enable_if放入Foo的模板参数列表中:

template <Specifier s>
struct Foo<s, typename std::enable_if<s == Specifier::Two || s == Specifier::One, void>::type>
// same as the default type used before ^^^^
demo

关于c++ - 为什么显式给出的模板参数不能为 “deduced”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64911802/

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