我可以使用“this”类型作为模板参数(在宏内)吗?

时间:2011-09-11 23:06:39

标签: c++ boost shared-ptr

我目前有这个:

#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派生的(间接)类中,有更好的方法可以方便地访问thisboost::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>);

1 个答案:

答案 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());
}