2009-10-13 107 views
17

我正在寫一個小型的C++程序來獲得樂趣並擴展我的C++技能。由於它的範圍相對較小,我還計劃通過使該程序支持Windows和Linux來嘗試跨平臺開發。學習和跨平臺開發(C++)

我認爲我的C++熟練程度在休閒和中級之間:OO,一些模板和設計模式,之前使用過STL並試圖更詳細地研究它,但是,儘管編碼這個小程序,我發現越深入挖掘C++,我越感覺到痛苦,尤其是當我瞭解和處理不同平臺/供應商的實現之間的差異時。

像Qt,ACE,Boost這樣的跨平臺框架的使用似乎有助於加速開發,從而使生活更輕鬆,但是我擔心這是否會超過我的目的。如果有任何C++跨平臺開發的「最佳實踐」,有人可以提供一些建議嗎?謝謝。

回答

16

如果有C++跨平臺開發的「最佳實踐」,有人可以提供一些建議嗎?

有三件事情:

  1. 編寫自己的代碼,以便它的便攜背後的抽象/絕緣/公用事業層

  2. 裹特定平臺的API

  3. 選擇跨平臺的庫

您可以選擇選項#2和/或#3。 #3,#個2

優勢往往是一樣的東西,「這已經寫好,調試和支持」;缺點是「我必須學習它,我可能不得不爲此付出代價,我不一定會自己支持它,它可能不會完全符合我的要求。」

開發人員往往喜歡代替#2選項#3,尤其是如果它是免費的開源的(這三個你提到的庫都)。

2

除非你在做圖形用戶界面的東西跨平臺不是一個大問題。

有一些與文件系統有關的小問題(不同的\\分隔符,文件名中允許的字符等),但這些是在應用程序級而不是C++。

做主要應用程序變得越來越複雜,你需要以跨平臺的方式處理幫助,文件位置可能的安全和用戶信息。對於簡單的算法類型編程,不存在任何問題。

Qt主要是一個GUI庫,雖然它有額外的跨平臺文件系統的東西。 STL,Boost,ACE是跨平臺的,但這不是主要的一點。

2

使用它們!認真。您可能需要使用它們的而不是的唯一原因是您計劃在無法使用的環境中工作。但是,鑑於其跨平臺性質,這不太可能。

你會發現使用它們的好處是巨大的,即使它們不是跨平臺的。你所說的「最佳實踐」就是能夠儘可能地提供你的「產品」。

我曾經回答過一個人的問題,他聲稱他不想在Xlib以上的級別使用GUI庫。如果他真的曾經使用過Xlib,他會知道當我們被迫在如此低的抽象層次上進行編碼時,我們都會感受到的痛苦。這與想要在彙編程序中編寫代碼非常相似,因爲C/C++?Python/Perl/everthting-else只是一個更高級的abstarction。

3

使用gcc。它在Windows和Linux上均可用,並且這兩種平臺上的庫和語言語法都是相同的。

對於跨平臺GUI應用程序,Qt是一個好主意。如果您試圖實現平臺獨立性,則不會從依賴於GUI框架中脫身。

1

我想你可以使用ACE或同等庫學到很多東西。他們會提高你對C++和設計模式的理解。我認爲這是你可以做的最好的事情來提高你的編碼技能。

1

如果你是在做你的代碼作爲跨平臺儘可能真正感興趣的,使用盡可能多的編譯器成爲可能。如果您使用Windows和Linux,至少應使用VC和gcc。這將確保您不使用編譯器特定的功能,並且不依賴於系統特定的行爲。如果您有權訪問它們,請使用更多編譯器(英特爾,IBM等)和操作系統(OS X,Solaris)。

2

這個答案是非常好,你可以做一個列表,找到在哪裏是開始。但我認爲你應該閱讀一些關於「移植應用程序」的文章。與跨平臺開發不相關,但是這會給你很大的關於跨平臺開發的觀點。在跨平臺開發,更多的進口事情之一就是像「端」(字節命令 - 字節順序可以顯示tehnologies或平臺的差異)

2

使用升壓內存問題。他們會爲您處理跨平臺的事情。

boost::filesystem是一個很好的例子