2012-07-23 148 views
1

我正在爲SQL數據庫打包,我返回的對象是shared_ptr
我想支持陣列類型訪問(即row["column"]而不是row->get("column"))。對象shared_ptr存儲支持數組類型訪問,但當然shared_ptr不支持。
我應該怎麼做shared_ptrs,我需要延長課程嗎?C++ shared_ptr數組類型訪問

+1

@BoBTFish:我似乎記得operator []必須是一個meber ... – 2012-07-23 08:49:52

+0

正確,我只是堅持認爲那是第一個想法。現在我測試了一下,發現它不起作用,我刪除了這個建議。 – BoBTFish 2012-07-23 08:56:46

+3

(* row)[「column」] – 2012-07-23 08:58:01

回答

2

最明顯的是將operator[]添加到shared_ptr。 這意味着定義你自己的shared_ptr重用std :: shared_ptr並讓[]運算符以你想要的方式工作。

這可以通過派生shared_ptr以快速和骯髒的方式完成(注意:shared_ptr不是多態對象,所以不要混淆std ::和你在同一個上下文中,以便你可以重用他們的接口) 。

如果你是一個球迷,「如果析構函數不是虛擬的不派生」,比它是由你來嵌入的std :: shared_ptr的在yourptr,並重寫的shared_ptr接口yourptr一個,委派功能你必須保留。

+0

我希望避免重寫接口,但看到它的析構函數不是虛擬的,我想我沒有太多的選擇。出於好奇,你知道爲什麼標準庫函數不是虛擬的嗎?這是一種表演嗎? – user1520427 2012-07-23 09:07:57

+0

因爲它們不適用於「多態性」。問題是,OOP粉絲認爲derivationm僅適用於OOP。但是,這是他們的錯,而不是誰的來源。請參閱http://stackoverflow.com/a/10478845/924727或http://stackoverflow.com/a/11202368/924727 – 2012-07-23 09:33:56

+0

偉大的回覆,謝謝你的鏈接。 – user1520427 2012-07-23 10:08:10