我正在使用C++,並使用「g ++」編譯連接到OpenCV2的&。令我困擾的一件事是,所有舊的以cv爲前綴的函數仍然可用並「污染」我的應用程序。可能在OpenCV中隱藏cv-prefixed函數?
是否有可能使OpenCV1 C cv前綴函數在我的應用程序範圍內不可用並且只保留命名空間的OpenCV2 cv::
?
注:我有一段時間沒有寫C,所以請讓我知道這是否是一個愚蠢的問題。
我正在使用C++,並使用「g ++」編譯連接到OpenCV2的&。令我困擾的一件事是,所有舊的以cv爲前綴的函數仍然可用並「污染」我的應用程序。可能在OpenCV中隱藏cv-prefixed函數?
是否有可能使OpenCV1 C cv前綴函數在我的應用程序範圍內不可用並且只保留命名空間的OpenCV2 cv::
?
注:我有一段時間沒有寫C,所以請讓我知道這是否是一個愚蠢的問題。
這取決於你真正需要什麼。如果你只是想使這個代碼: - :包括任何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個功能,所以你必須找到你想要「禁用」的所有功能並手動編寫類似的代碼。
使用「停用」函數的函數可以正常工作,因爲它們已經被編譯,鏈接等 - 您只需從某些文件調用它們而不更改此文件中的任何內容。
偉大的,詳細的答案;謝謝。如果我的目標是使用遺留的前綴函數來阻止團隊中的某個人,那麼這將是一個可能的解決方案(我應該澄清那不是)。但是這並不能解決範圍污染的問題,因爲它會在範圍內留下所有'nothing_interesting_ *'un-namespaced函數。 –
隱藏?像使私人,就像不自動完成欄中顯示,或者像重命名? – CodaFi
@CodaFi使私人,我想。爲了防止他們在我的申請範圍內可用。 –
不要#include聲明它們的頭文件? –