[英]Initialize Vector of Long Doubles with Initialization List of Ints
假設我有一個簡單的類:
class Pvector
{
private:
std::vector<long double> point_list;
public:
Pvector(std::initializer_list<long double> coords) : point_list(coords)
{}
Pvector(std::initializer_list<int> coords) : point_list(coords)
{}
};
這將無法編譯,因為在類型long double
上模板化的std::vector
無法從類型為int
模板化初始化列表中初始化自身。 但是,這很不方便,因為刪除了第二個構造函數后,我無法在代碼中執行以下操作:
Pvector piece_movement({E.X - S.X, E.Y - S.Y, E.Z - S.Z});
這是因為我的算術運算的結果類型是int
類型。 所以我似乎陷入了一個難題。 我希望能夠將整數直接傳遞給Pvector
的構造Pvector
,但我仍然希望point_list
的類型為long double
並且(不知何故)使用我傳入的整數進行初始化。我怎么能這樣做呢?
解決方案1
您可以刪除第二個構造函數,但仍然可以使用構造PVector
Pvector v2{1, 2};
例:
#include <initializer_list>
#include <vector>
class Pvector
{
private:
std::vector<long double> point_list;
public:
Pvector(std::initializer_list<long double> coords) : point_list(coords)
{}
};
int main()
{
Pvector v1{1.0, 2.0};
Pvector v2{1, 2};
}
解決方案2
在Pvector
使用模板構造函數,並使用std::vector
的構造函數,它使用兩個迭代器來初始化point_list
。
#include <initializer_list>
#include <vector>
class Pvector
{
private:
std::vector<long double> point_list;
public:
// This is not necessary any more.
// Pvector(std::initializer_list<long double> coords) : point_list(coords){}
template <typename T>
Pvector(std::initializer_list<T> coords) : point_list(coords.begin(), coords.end()){}
};
int main()
{
Pvector v1{1.0, 2.0};
Pvector v2{1, 2};
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.