我为类vec
(矢量数学)使用以下构造函数,可以使用坐标(coord
类)构造该构造函数。的coord
,因为我想这两个双和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);
该int
和double
距离推断模板参数&s
和&d
; 它们用于模板参数T
和U
构造函数模板。
对于类模板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);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句