2013-01-10 47 views
0

我正在使用C++,並使用「g ++」編譯連接到OpenCV2的&。令我困擾的一件事是,所有舊的以cv爲前綴的函數仍然可用並「污染」我的應用程序。可能在OpenCV中隱藏cv-prefixed函數?

是否有可能使OpenCV1 C cv前綴函數在我的應用程序範圍內不可用並且只保留命名空間的OpenCV2 cv::

注:我有一段時間沒有寫C,所以請讓我知道這是否是一個愚蠢的問題。

+0

隱藏?像使私人,就像不自動完成欄中顯示,或者像重命名? – CodaFi

+0

@CodaFi使私人,我想。爲了防止他們在我的申請範圍內可用。 –

+0

不要#include聲明它們的頭文件? –

回答

0

這取決於你真正需要什麼。如果你只是想使這個代碼: - :包括任何OpenCV的文件之前

#define cvAvg nothing_interesting_cvAvg 
#define cvAcc nothing_interesting_cvAcc 
//you can change nothing_interesting_... to anything, but you can't use the same text more than once 
//you include files 
//... 
//after your include files 
#undef cvAvg 
#undef cvAcc 

CvArr *arr; 
cvAvg(arr); 
cvAcc(arr, arr); 

「不工作」,你可以只添加這一點。如果您現在試圖編譯代碼,您將看到:

error C3861: 'cvAvg': identifier not found 

如果你改變你的代碼使用nothing_interesting_cvAvg(arr);,而不是cvAvg(arr);,它將編譯罰款,但連接器將失敗,因爲:

: error LNK2019: unresolved external symbol _nothing_interesting_cvAvg referenced in function _main 

注這隻適用於這2個功能,所以你必須找到你想要「禁用」的所有功能並手動編寫類似的代碼。
使用「停用」函數的函數可以正常工作,因爲它們已經被編譯,鏈接等 - 您只需從某些文件調用它們而不更改此文件中的任何內容。

+0

偉大的,詳細的答案;謝謝。如果我的目標是使用遺留的前綴函數來阻止團隊中的某個人,那麼這將是一個可能的解決方案(我應該澄清那不是)。但是這並不能解決範圍污染的問題,因爲它會在範圍內留下所有'nothing_interesting_ *'un-namespaced函數。 –