2010-06-03 49 views
3

我已經創建了一個大的C++類。我需要把它交給另一個人。 我不希望他看到函數實現,但他應該能夠使用它作爲一個類。 (例如:他可以繼承此類,在其代碼中使用其全部功能,但無法查看或更改函數實現等)什麼是分發C++類的最佳方式

我該如何做到這一點。 感謝你..

回答

0

只把全部類聲明放在一個頭文件中,並將定義放在一個.cpp文件中,或者如果你真的關心它,請將該類編譯爲.lib文件。

0

從您的源創建一個共享或靜態庫,並分發頭文件供他人使用您的類。 使用你的課程的人必須與你的圖書館鏈接。

8

你的代碼不太值得保密。一些C++代碼(例如用戶代碼中內聯的模板和函數)必須放在頭文件中。如果你真的需要一種保密措施,你可以將非模板函數的實現放在一個.cpp文件中,編譯成一個庫,然後分發頭文件和庫。當然,用戶仍然可以檢查庫的機器碼。

+1

+1爲保密而浪費每個人的時間(並綁定任何程序員陷入困境試圖理解或修復你的課程中的錯誤)。另外,將C++代碼編譯到一個庫中可以將它與任何特定的平臺聯繫起來。因此,如果你必須在你的.cpp文件上使用代碼混淆器,那麼它們可能會被重新編譯(除了這個祕密會再次浪費你和其他人的時間):http://en.wikipedia.org/wiki/Obfuscated_code – HostileFork 2010-06-03 11:18:24

7

在C++中,class就是這樣的:a 句法結構。只要你願意,你可以自由地安排跨文件的課程。您可以將每個類放入它自己的頭文件/ .cpp文件對中,只製作頭文件類,並將它們分散到多個文件中 - 只要您喜歡。

在C++中,你不分發類,你分發文件。有人利用你的代碼,他們需要的所有聲明(類和其他一切)編譯器加上定義匹配這些聲明的鏈接。 (什麼是聲明和什麼是定義見this answer)。

通常將聲明放入頭文件中,通常以C++編寫,其結尾爲.h.h或或。 (還有更多的約定,但這些是我見過的最多的。)
定義可以以源文件(.cpp文件)或其編譯形式作爲目標文件分發。如果需要多個目標文件,則通常將它們組合到一個庫中(在類似Unix的系統上,通常以.a結尾,在Windows .lib上)。

因此,這些都是鐵的事實:

  1. 你無法避免分發頭文件。期。
  2. 如果你不想讓別人看到你的定義,你需要編譯它們並分發對象文件,最好是作爲一個庫文件。

    但分發庫肯定有它的缺點。C++沒有定義編譯代碼的二進制API,所以代碼必須始終與相同的編譯器編譯時,相同的編譯器版本相同的編譯器設置,以便被鏈接一起。
    這意味着你或者必須指定你的服裝商他們的編譯器設置(如果他們有來自不同供應商的庫(這可能會導致衝突的設置)很難讓他們接受,或者你必須滿足他們的所有需求麻煩)。

    而且,因爲一切都在標題是向所有人開放的眼睛,inline功能的實現是,由於其本身的性質,unprotectable。但是爲什麼在不使用它們提供的性能增益時使用C++呢?

最後,分發源文件通常更容易。沒有冒犯的意思,但正如尼爾所說的那樣:如果你還不知道類和文件之間的區別以及如何分配它們,那麼你發放財富的可能性就不大。

0

最接近你想要的是爲windows或.so創建一個用於Linux的.dll和一個lib文件,並將其提供給有問題的人。

+0

你也需要頭文件。 – Cthutu 2010-06-03 12:46:50

相關問題