2012-07-01 30 views
2

這裏是例子:如何從此指針獲取std :: weak_ptr <MyClass>?

tempalate <class T> class MyClass : public T { 
    public: 
    MyClass(std::weak_ptr<MyClass> parent) { 
     //--------------------------------------+ 
     //          | 
     //          V 
     auto child = std::make_shared<MyClass>(this); 
    } 
}; 

如何做到這一點?如果我需要從std::enable_shared_from_this<MyClass<T>>推導MyClass,那麼我該怎麼做沒有多重繼承,因爲MyClass已經從另一個T祖先衍生而來,我需要在構造函數上調用shared_from_this()

在我的情況T可能是從enable_shared_from_this<T>繼承了一些課,但並不總是

+1

多繼承是正確的答案。我不明白爲什麼它是一個問題。 – rodrigo

回答

0

std::enable_shared_from_this不會在T繼承,因此在這裏沒有任何問題。

你不需要在CTor中調用shared_from_this,當你有this並且需要相應的shared_ptr時,你會打電話給你。

+0

問題是T也可以從'std :: enable_shared_from_this'繼承,可以嗎?因爲我有點害怕 – uray

+0

好吧 - 我試過你的情況,這似乎是有問題的(使用VS2008的std:.tr1)。如果T已經從enable_shared_from_this繼承,那麼您可以使用'enable_if'來防止繼承(或繼承另一個虛擬)。但是,我沒有足夠的流暢度來嘗試。 – peterchen

相關問題