我有一个类vec
(向量数学)的以下构造函数,可以使用坐标(coord
class)构造。由于各种原因,coord
类被模板化,因为我想要double和coords
。
vec(coord<double> *start, coord<double> *end);
vec(coord<int> *start, coord<double> *end);
vec(coord<double> *start, coord<int> *end);
有没有更好的方法来设置构造函数,比如我可以有一个构造函数来获取各种参数?
另外,假设这是可能的,它叫什么?任何研究都没有提供太少的信息
答案 0 :(得分:1)
类和类模板都可以包含构造函数模板。这些是一种特殊的函数模板,用于创建构造函数:
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);
编译器隐式创建(&#34;实例化&#34;)一个如下所示的构造函数:
template<>
my_ordinary_class::my_ordinary_class<int, double>(coord<int>* start,
coord<double>* end);
int
和double
是从&s
和&d
推导出的模板参数;它们用于构造函数模板的模板参数T
和U
。
对于类模板my_class_template
,我们首先创建(&#34;实例化&#34;)一个类,比如说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);