[英]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.