2009-01-23 67 views
1

我應該通過包裝STL類和/或Boost庫來創建自己的框架,以便如果需要更改字符串,向量,列表等的實現或我需要編寫MFC,其他其他庫或者甚至其他平臺都需要使用它們的格式,我可以很容易地改變它們以符合標準。這就是我的想法。我應該創建自己的框架嗎?

// In my framework: 
namespace MyFX { 
    typedef std::string String; 
}; 

// Port specific (MFC in this case) 
CString ToCString(const MyFx::String &str) { /* magic */ } 

// Port specific (.NET specific) 
System::String^ ToManagedString(const MyFx::String &str) { /* magic */ } 

我是不是重新發明了車輪?

我會在用戶界面和其他圖層之間的UI界面中使用MyFx :: String

回答

6

在我看來,這似乎不會有太多好處;根據我的經驗,使用這些框架的是這樣,你不會重新發明輪子。如果你發現你需要編寫一個新的字符串類或者一個新的向量類,你應該認真考慮它,並且確保你不只是在做別的錯誤。我並不是說沒有理由編寫自己的字符串類,我只是說這很少見。鑑於此,我建議直接使用所需的框架。

關於轉換功能,相信編譯器將看不到你的ToCString功能的任何不同於它會看到這一點:

CString ToCString(const std::string &) {...} 

這是因爲C++的typedef不會創建一個新的類型,只是一個別名到現有類型。

再思考

我想你說出這裏的問題是一個很自然的,我知道它已經出現在我的團隊多次。不過,我認爲答案仍然如上所述。

雖然STL課程可能並不完美,但它們都是由非常聰明的人設計的,他們對此任務進行了大量的思考。因此,你需要編寫一個完整的替換字符串類的機率非常小。此外,如果沒有任何輕微的意圖,它會花費您(或我)很長時間來實現一個可以替代std :: string的強大的通用字符串類。

另一種可能的方式來思考它會是這樣的:你會考慮「替換」在Java或C#中的字符串類?我認爲答案顯然是「否」,儘管可能偶爾會有一些地方使用除字符串之外的其他字符來表示字符序列。同樣的事情發生在這裏:std :: string和C++到達一個內置的字符串類一樣近,你幾乎肯定不需要替換它。

+0

如果我需要用別的東西替換std :: string會怎樣? – 2009-01-23 18:27:35

3

我應該製作自己的框架嗎?

呃...沒有。

我不會真的擔心替換std :: vector,直到有業務需要這樣做,因爲YAGNI

5

「我是不是重新發明了輪子?」 - 是的。不要這樣做。

2

「它取決於」 - 如果您認爲將來有可能更改爲某些其他庫/庫(例如,由於移植到其他平臺),則可以制定一個框架以滿足您的需求,但使它成爲一個門面,薄和簡單越好

,這是一個時間/風險的權衡決定,只有你可以使

0

最大的好處將是您將獲得的學習體驗。

相關問題