2013-05-08 62 views
-1

我在浏览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 ::垫&)

+2

可能有另一个重载版本的merge。只要继续寻找。 – stardust 2013-05-08 12:44:14

+0

没有他们不是:D我刚刚打开一个新的项目,并复制此功能,并从主叫它,它正在工作! – 2013-05-08 12:45:02

+0

那不可能。记得你有一些包括:)。新项目不是一个空的项目。 – stardust 2013-05-08 12:45:55

回答

1

这绝对不是一个递归调用。呼叫

merge(&mv[0] ,3, _dst); 

并没有叫

void merge(const cv::vector<cv::Mat>& mv, cv::Mat _dst) 

这一点是明确的,因为参数计数不匹配。

解释是merge被重载。还有另外三个参数的版本。这三个参数版本是在您包含的其中一个头文件中声明的。

1

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)