gpt4 book ai didi

c++ - 模板专用类之间的构造函数重载

转载 作者:行者123 更新时间:2023-11-30 04:47:00 26 4
gpt4 key购买 nike

在下面的代码中,我有一个类模板及其特化。

template<size_t U>
struct Foo
{
Foo(double(&u)[U]) : u{ u } {}
double(&u)[U];
};

template<>
struct Foo<1>
{
double &u;
bool specialized = true;
Foo(double &u) : u{ u } {}
};

如果我尝试使用推导的模板参数创建一个实例,那么构造函数参数将仅与通用 Foo 对象匹配。

double s[7] = { 1, 2, 3, 4, 5, 6, 7 };
Foo f(s); // will deduce s is of type Foo<7>

double t = 5.;
Foo g(t); // no instance matches the argument list!
Foo<1> g(t); // I must explicitly tell it I'm using the specialization

当然,如果专用类有相同的构造函数参数,我做了类似Foo g(t) 的操作,其中t 是输入 double[1],实例将是专用类型。

那么,在这种情况下,为什么专用构造函数也没有被解析(或者构造函数集的一部分)?

最佳答案

隐式生成的演绎指南只考虑主模板,但您可以自己添加演绎指南:

Foo(double &u) -> Foo<1>;

Demo

另请注意

double t[1] = {5.};
Foo g(t); // deduce Foo<1>, but fails as specialization doesn't have compatible constructor

关于c++ - 模板专用类之间的构造函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56395808/

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