2011-09-11 39 views
3

我現在有這樣的:我可以使用「this」類型作爲模板參數(在宏內)嗎?

#define THIS(T) (boost::static_pointer_cast<T>(shared_from_this())) 

宏在方法中使用這樣的:

void Derived::run() { 
    do_something_with_a_shared_ptr(THIS(Derived)); 
} 

這一切都很好,但我想,以消除(Derived)和有:

void Derived::run() { 
    do_something_with_a_shared_ptr(THIS); 
} 

這可能嗎?

或者,有沒有更好的方法可以方便地訪問shared_ptrthis,在派生(間接)從boost::enable_shared_from_this派生的類? This question似乎表明對此的答案是否定的。

的類層次結構如下所示:

class Base: public boost::enable_shared_from_this<Base> { 
    ... 
} 

class Derived: public Base { 
    ... 
    void run(); 
    ... 
} 

void do_something_with_a_shared_ptr(boost::shared_ptr<Derived>); 

回答

3

不完全回答你的問題,但你有沒有考慮過使用成員函數,而不是一個宏觀的?我通常做類似於:

boost::shared_ptr<Derived> shared_this() 
{ 
    return boost::static_pointer_cast<Derived>(shared_from_this()); 
} 
boost::shared_ptr< Derived const > shared_this() const 
{ 
    return boost::static_pointer_cast<Derived const>(shared_from_this()); 
} 
+0

請注意,如果您使用C++ 11,則可以根據decltype和this進行操作。 –

+0

爲什麼這會返回一個指向共享指針的指針? –

+1

我的錯誤,應該已經複製了代碼。現在會修復。 –

相關問題