你可以轉換操作符添加到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