2013-05-08 67 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)