gpt4 book ai didi

c++ - 如何在构造函数中为不同的类使用模板化类

转载 作者:行者123 更新时间:2023-11-28 06:13:52 25 4
gpt4 key购买 nike

我有一个类 vec( vector 数学)的构造函数,它可以使用坐标(coord 类)构造。 coord 类是模板化的,因为出于各种原因我想要 double 和 int coords

vec(coord<double> *start, coord<double> *end);
vec(coord<int> *start, coord<double> *end);
vec(coord<double> *start, coord<int> *end);

有没有更好的方法来设置构造函数,比如我可以拥有一个接受各种参数的构造函数?

另外,假设这是可能的,它叫什么?任何研究都提供的信息很少

最佳答案

类和类模板都可以有构造函数模板。这些是创建构造函数的特殊类型的函数模板:

class my_ordinary_class
{
template<typename T, typename U>
my_ordinary_class(coord<T>* start, coord<U>* end);
};

template<typename X>
class my_class_template
{
template<typename T, typename U>
my_class_template(coord<T>* start, coord<U>* end);
};

例如,如果我们创建 my_ordinary_class 的对象像这样:

coord<int> s;
coord<double> d;
my_ordinary_class my_obj(&s, &d);

编译器隐式创建(“实例化”)一个如下所示的构造函数:

template<>
my_ordinary_class::my_ordinary_class<int, double>(coord<int>* start,
coord<double>* end);

intdouble是从 &s 推导出来的模板参数和 &d ;它们用于模板参数 TU构造函数模板。

对于类模板my_class_template ,我们首先创建(“实例化”)一个类,比如 my_class_template<bool> .然后,我们可以使用其构造函数模板创建该类的对象:

coord<int> s;
coord<double> d;
my_class_template<bool> my_obj(&s, &d);

编译器将实例化类 my_class_template<bool>它将从其构造函数模板实例化一个构造函数,如下所示:

template<> // class template
template<> // constructor template
my_class_template<bool>::my_class_template<int, double>(coord<int>* start,
coord<double>* end);

关于c++ - 如何在构造函数中为不同的类使用模板化类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30699390/

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