是否可以为我没写过的类添加一个复制构造函数(换句话说就是重载它)?
例如,我正在使用一些具有Point类的库。我想为它添加一个拷贝构造函数。我不能也不想编辑它。
虚构语法:
cv::Point cv::Point::Point(const AnotherPoint& p){
return cv::Point(p.x,p.y);
}
P.S我也没有写AnotherPoint
。
EDIT -Problem背景 - :
我想要使用标准函数std::vector<cv::Point>
将std::vector<AnotherPoint>
复制到另一个std::copy
的所有问题。所以我正在寻找一种方法来重载复制构造函数来实现它。
答案 0 :(得分:5)
在定义之后,您无法将构造函数添加到类型中。
将std::vector<cv::Point>
复制到std::vector<AnotherPoint>
的简单方法是使用std::transform
:
std::vector<cv::Point> cvPoints;
//cvPoints filled
std::vector<AnotherPoint> otherPoints;
otherPoints.reserve(cvPoints.size()); //avoid unnecessary allocations
std::transform(std::begin(cvPoints), std::end(cvPoints),
std::back_inserter(otherPoints),
[](const cv::Point& p){ return AnotherPoint{p.x, p.y}; });
答案 1 :(得分:1)
这是不可能的。
你可以做相反的事情,即从你的类型(AnotherPoint
)到另一个(cv::Point
)定义隐式conversion operator。
这样,您就可以在预期AnotherPoint
的任何地方使用cv::Point
类型的对象。
如果您也无法控制AnotherPoint
,我想唯一的方法就是定义一个独立功能,从而创建一个cv::Point
AnotherPoint
。
OP编辑后:
最后,要将vector<cv::Point>
转换为vector<AnotherPoint>
,您可以使用上面提到的独立函数作为std::transform
的unary_op
,正如@TartanLlama建议的那样。