2015-11-17 27 views
1

是否可以为我没有写入的类添加拷贝构造函数(换句话说是为了重载它)?将拷贝构造函数添加到类中

例如,我正在使用一些具有Point类的库。我想添加一个复制构造函数。我不能也不想编辑它。

虚语法:

cv::Point cv::Point::Point(const AnotherPoint& p){ 
    return cv::Point(p.x,p.y); 
} 

P.S我没有写AnotherPoint也。

编辑 - 问题背景 - :

所有我的问题,我想使用标准功能std::copystd::vector<cv::Point>复制到另一个std::vector<AnotherPoint>。所以我正在寻找一种方法来重载拷贝构造函数来实现它。

+2

你也许可以用'的std :: transform'开展您的副本。 – TartanLlama

+0

是的,这正是我正在寻找的。许多thansk –

回答

1

这是不可能的。

虽然你可以做相反的事情,即从你的类型(AnotherPoint)到另一个(cv::Point)定义一个隐含的conversion operator

通过这种方式,您将能够使用AnotherPoint类型的对象,并且在任何地方都可以使用cv::Point

如果没有超过AnotherPoint控制也一样,我猜去的唯一方法是定义一个独立功能从一个AnotherPoint创建cv::Point

OP编辑后:

最终,来变换vector<cv::Point>vector<AnotherPoint>你可以使用上面提到的独立功能的std::transformunary_op,作为@TartanLlama建议。

+0

谢谢。这是完全有用的。卜我忘了提及另一点不在我的控制之下。 –

+0

它在复制过程中会工作吗?我的意思是它会是一个复制构造函数?而不使用std :: transform –

+1

@HumamHelfawi不,你需要直接调用它,比如'anotherToCv(myAnotherPoint);'。 – TartanLlama

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}; }); 
+0

这是正确的答案。我回答了一个非常不同的问题(在OP的编辑之前),所以我会留下我的答案。 –