c ++递归调用参数

时间:2013-05-08 12:42:40

标签: c++ opencv recursion

当我在/core/src/convert.cpp中获得此功能时,我正在浏览OpenCV源代码:

void merge(const cv::vector<cv::Mat>& mv, cv::Mat _dst)
{
    merge(&mv[0] ,3, _dst);
}

Original函数如何只有2个参数:

  

merge(const cv :: vector&amp; mv,cv :: Mat _dst)

和3个参数的递归调用

  

merge(const cv :: Mat *, int ,cv :: Mat&amp;)

2 个答案:

答案 0 :(得分:1)

这绝对不是一个递归调用。电话

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

没有打电话

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

由于参数计数不匹配,因此很清楚。

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

答案 1 :(得分: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)