是否可以将"this"类型用作模板参数(在宏内)?

Can I use the type of "this" as a template argument (inside a macro)?

本文关键字:参数 this 类型 是否      更新时间:2023-10-16

我现在有这个:

#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派生的类中?这个问题似乎表明这个问题的答案是否定的。

类的层次结构如下:

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>);

不完全回答您的问题,但您是否考虑过使用成员函数而不是宏?我通常这样做:

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