簡體   English   中英

如何在構造函數中為不同的類使用模板化的類

[英]How to use templated class in constructor for a different class

我有以下用於vec類(矢量數學)的構造函數,可以使用坐標( coord類)進行構造。 由於各種原因,我想同時使用double和int coords ,所以對coord類進行了模板化。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM