你可以转换操作符添加到ColorSpacePoint
:
struct ColorSpacePoint
{
int X;
int Y;
operator NewColorSpacePoint() { return {X,Y}; }
};
或非明确的构造函数NewColorSpacePoint
:
struct NewColorSpacePoint
{
int X;
int Y;
NewColorSpacePoint (const ColorSpacePoint& rhs) : X{rhs.X}, Y{rhs.Y} {}
};
ŧ他会让你只需要使用std::vector
范围构造:
std::vector<NewColorSpacePoint> new_points {points.begin(), points.end()};
如果你宁愿不使用隐式转换,你可以做一个免费的功能和使用std::transform
:
NewColorSpacePoint to_new_color (const ColorSpacePoint& csp) {
return {csp.X,csp.Y};
}
std::vector<NewColorSpacePoint> new_points;
new_points.reserve(points.size());
std::transform(points.begin(), points.end(),
std::back_inserter(new_points), to_new_color);
+1了转换选项 - 在我看来这是要走的路。它允许这些类保持更多的封装并且更简单;稍后更新您的班级类型不需要编辑每个班级转换为另一班级 – johnbakers