如何在构造函数中为不同的类

时间:2015-06-07 23:08:16

标签: c++ class templates

我有一个类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);

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

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

1 个答案:

答案 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);

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

对于类模板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);