![](/img/trans.png)
[英]How to use function pointer as a constructor argument for a templated class?
[英]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);
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.