2009-05-23 66 views
2

爲了儘快掌握C++(來自C的長期經驗),我顯然正在嘗試做正確的事情,儘可能地使用標準。在糟糕的非標準C++庫中,什麼是好的部分?

但是,在我對此事的看法中,我對標準事物抱有很多批評,並讚揚非標準事物。例如,即使是(我認爲)思維不足的MFC庫也有其特徵,例如,它的類別CString類別中的一些人認爲有用,足以使它們繼續使用它,儘管事實上它(a)標準和(b)它(我從許多批評中假設)在許多重要方面存在缺陷。

我的問題是雙重的,則:

A.什麼被庫不善深思熟慮的包含的功能,仍然使它值得繼續使用它們,那些是什麼特點,有什麼好他們?

B.是否有「適配器」庫在那裏簡化和/或加強使用這些庫,例如:提供很好的接口,抽象資源泄漏,從非STL庫接口轉到STL的適配器,等等

作爲StackOverflow的相對新手,我並不是100%確定這個問題是足夠的,點,所以如果太開放,我很抱歉。提前

感謝

回答

2

我的個人垃圾與ACE。這是另一種方式 - 好主意,當時沒有其他可用於C++的跨平臺線程和網絡開發,廣泛部署,圖書館作者的書籍等等。但是實現是糟糕的,使用模式是複雜的,幾乎所有C++的有用特性都被壓制了(或者當時並不存在)。我認爲這個庫本身就是很好的一部分人認爲C++很難和醜陋的原因。最近Boost集合開始追趕線程,ipc和網絡,所以至少有一個選擇。但是儘管如此,我仍然認爲如果你處於這個領域,應該熟悉ACE,因爲太多的人使用它,這些想法很好,它可以作爲圖書館設計的一個很好的負面例子。

+1

從其源代碼看,我認爲ACE的「問題」在於它支持許多編譯器,包括用於嵌入式和實時O/SES的編譯器,早在C++本身(或者至少編譯器支持它不是標準的...所以ACE需要迎合'最低公分母',所有編譯器支持的C++的最小子集,以及大量的#ifdefs等。 – ChrisW 2009-05-23 05:37:30

0

CString的是非標準的,因爲MFC是不是跨平臺的,我想。 std :: string()是標準的,但如果我們使用標準的一切,那麼爲什麼MS開發MFC?

+5

最有可能的MFC和CString是在STL被標準化之前開發出來的...... – bdonlan 2009-05-23 03:21:24

2

IMO有關MFC的最好的事情是,歷史上它在STL可用之前是可用的,而且什麼都比沒有好。

如果您要編寫與現有MFC代碼庫兼容的代碼,MFC仍然很好。除此之外,在MFC中幾乎沒有什麼優點,除了它可能仍然是Windows中最明顯的C++類庫之一(如果不是最多的話)。

+0

我的意思是從學習習慣C++,標準C++等角度來看沒什麼價值。它是一種務實的(儘管有點醜陋和複雜)選擇if你想用C++編寫Windows UI。 – ChrisW 2009-05-23 03:27:00

1

關於更普遍的說法,我認爲人們堅持使用舊的,尷尬的甚至過時的圖書館的原因之一是,他們已經習慣了它,任何新的和有光澤的東西都可以更好地完成這項工作,但更難掌握/最初理解。所以你留在熟悉的東西,保持你的生產力。

我認爲這是在完成工作和完成工作「正確」之間的一個平衡點。介於兩者之間的地方可能是我們大多數人最終遇到的地方。