將C組件放入C++框架的最佳做法是什麼?將C組件集成到C++框架中的最佳做法是什麼?
我們的實驗室正在爲我們的研究構建一個C++框架。它使用一些現有的軟件作爲組件。我的工作是軟件C.集成軟件的結構非常簡單:
- 在A.H
- 在B.H。一組數據結構定義和函數原型一套
extern
變量 - 其餘的源代碼是實現B.h.中定義的函數的.c文件。
將C組件放入C++框架的最佳做法是什麼?將C組件集成到C++框架中的最佳做法是什麼?
我們的實驗室正在爲我們的研究構建一個C++框架。它使用一些現有的軟件作爲組件。我的工作是軟件C.集成軟件的結構非常簡單:
extern
變量包裝紙所有的C頭文件和源文件與:
#ifdef __cplusplus
extern "C" {
#endif
//... rest of the file
#ifdef __cplusplus
}
#endif
這是編譯和C++編譯器鏈路正常。這只是第一步。根據實現以及C代碼中如何使用函數,C++編譯器可能會抱怨幾件事情。但試試這是你的第一步。
請參閱here瞭解如何從C++訪問C函數的不錯介紹。
值得考慮一下,使用C++的附加功能是否可以有效改善客戶端使用風格。你通常可以簡單地包裝C函數以獲得更多的C++風格體驗。例如:
x = a + b
,而不是x = add(a, b)
)void*
型這只是場外的頂級我的頭的東西......如果您展示一個具有代表性的函數樣本,那麼給出具體的答案就容易多了。
當然,正如你所說的你有C源代碼,你可以嘗試用C++編譯器編譯它,這會讓你選擇避免「extern C」和全局名稱空間的污染,以及添加上面的許多不作爲包裝,但作爲調整現有的代碼:可以節省您的時間,並使維護更容易。
+1:乾淨地封裝一些函數調用返回的數據,然後用作輸入......對於所有那些從C++角度來看,C++ API實際上都是「從裏到外」建模的,比如使用不透明的手柄或其他任何環境,都可以翻到課堂上。 – 2011-03-29 06:25:52