2011-03-29 62 views
0

將C組件放入C++框架的最佳做法是什麼?將C組件集成到C++框架中的最佳做法是什麼?

我們的實驗室正在爲我們的研究構建一個C++框架。它使用一些現有的軟件作爲組件。我的工作是軟件C.集成軟件的結構非常簡單:

  • 在A.H
  • 在B.H。一組數據結構定義和函數原型一套extern變量
  • 其餘的源代碼是實現B.h.中定義的函數的.c文件。

回答

2

包裝紙所有的C頭文件和源文件與:

#ifdef __cplusplus 
extern "C" { 
#endif 

//... rest of the file 

#ifdef __cplusplus 
} 
#endif 

這是編譯和C++編譯器鏈路正常。這只是第一步。根據實現以及C代碼中如何使用函數,C++編譯器可能會抱怨幾件事情。但試試這是你的第一步。

請參閱here瞭解如何從C++訪問C函數的不錯介紹。

3

值得考慮一下,使用C++的附加功能是否可以有效改善客戶端使用風格。你通常可以簡單地包裝C函數以獲得更多的C++風格體驗。例如:

  • 對象可以是能夠:
    • 乾淨地封裝了一些函數返回調用,其隨後用作輸入到後來的呼叫數據,使得其存儲和使用多個隱式
    • 提供一些保證關於建築的正確順序(初始化),使用和銷燬(清理)
  • 命名空間可以幫組和歧義標識符
  • 運算符重載可以允許類型上的操作更像數學或邏輯表達式(例如, x = a + b,而不是x = add(a, b)
  • 異常可能減少在客戶端代碼的地方,誤差值必須明確檢查和處理(有用的,如果這個錯誤相關的代碼正在混淆程序邏輯)
  • 如有數功能通過無效* S實現通用功能,那麼模板可以提供作爲前端,自動轉換和從void*

這只是場外的頂級我的頭的東西......如果您展示一個具有代表性的函數樣本,那麼給出具體的答案就容易多了。

當然,正如你所說的你有C源代碼,你可以嘗試用C++編譯器編譯它,這會讓你選擇避免「extern C」和全局名稱空間的污染,以及添加上面的許多不作爲包裝,但作爲調整現有的代碼:可以節省您的時間,並使維護更容易。

+0

+1:乾淨地封裝一些函數調用返回的數據,然後用作輸入......對於所有那些從C++角度來看,C++ API實際上都是「從裏到外」建模的,比如使用不透明的手柄或其他任何環境,都可以翻到課堂上。 – 2011-03-29 06:25:52

相關問題