2011-12-21 24 views
0

我想有一個shared_ptr作爲一個類的成員,但shared_ptr管理的類型每次都是不同的,只有在運行時才知道。有什麼方法可以聲明這樣的成員,並在以後進行初始化?通用shared_ptr作爲一個類的成員

回答

3

是的。

使用運行時多態性,這意味着定義一個公共基類,如Base,並將通用接口聲明爲虛函數,然後從中派生出來並在派生類中實現虛函數。如果這樣做,那麼你可以使用這樣的:

std::share_ptr<Base> ptr; 
//now ptr can store an instance of any derived class from Base 

或者你可以使用boost::any,如果它是不可能確定一個共同的基類。如果你不能使用Boost,那麼你可以自己定義any類。在本網站和谷歌搜索類型擦除。

以下是類型擦除兩頁的文章,你可以找到boost::anysecond page實現(雖然不完整):

+0

你的意思是'std :: shared_ptr '? – 2011-12-21 15:59:50

+0

@KerrekSB:糟糕。是。謝謝。 – Nawaz 2011-12-21 16:00:24

1

如果類型與此無關,您可以使用類似Boost.Any的東西。否則,做什麼@Nawaz says

相關問題