我目前有这个:
#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_ptr
派生的(间接)类中,有更好的方法可以方便地访问this
到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>);
答案 0 :(得分: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());
}