我在浏览OpenCV的源代码时,我得到了/core/src/convert.cpp此功能:C++递归调用参数
void merge(const cv::vector<cv::Mat>& mv, cv::Mat _dst)
{
merge(&mv[0] ,3, _dst);
}
怎么可能只有2个参数的原始功能:
合并(常量CV ::矢量MV &,CV ::垫_dst)
,并用3个参数
递归调用合并(常量CV ::垫*,INT,CV ::垫&)
我在浏览OpenCV的源代码时,我得到了/core/src/convert.cpp此功能:C++递归调用参数
void merge(const cv::vector<cv::Mat>& mv, cv::Mat _dst)
{
merge(&mv[0] ,3, _dst);
}
怎么可能只有2个参数的原始功能:
合并(常量CV ::矢量MV &,CV ::垫_dst)
,并用3个参数
递归调用合并(常量CV ::垫*,INT,CV ::垫&)
这绝对不是一个递归调用。呼叫
merge(&mv[0] ,3, _dst);
并没有叫
void merge(const cv::vector<cv::Mat>& mv, cv::Mat _dst)
这一点是明确的,因为参数计数不匹配。
解释是merge
被重载。还有另外三个参数的版本。这三个参数版本是在您包含的其中一个头文件中声明的。
merge(&mv[0] ,3, _dst);
不是呼叫void merge(const cv::vector<cv::Mat>& mv, cv::Mat _dst)
。
必须有某处有重载函数,即具有相同名称但签名不同的函数。其中一个例如void merge(const cv::vector<cv::Mat>& mv, int something, cv::Mat _dst)
。
可能有另一个重载版本的merge。只要继续寻找。 – stardust 2013-05-08 12:44:14
没有他们不是:D我刚刚打开一个新的项目,并复制此功能,并从主叫它,它正在工作! – 2013-05-08 12:45:02
那不可能。记得你有一些包括:)。新项目不是一个空的项目。 – stardust 2013-05-08 12:45:55