C++ 我可以使用“的类型吗?”;这";作为模板参数(在宏中)?

C++ 我可以使用“的类型吗?”;这";作为模板参数(在宏中)?,c++,boost,shared-ptr,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); } 这可能吗 或者,在从boost::enable_shared_from_this派生的类中,是否有更好的方法方便地访问shared_ptr到this?似乎表明答

我目前有:

#define THIS(T) (boost::static_pointer_cast<T>(shared_from_this()))
这一切都很好,但我想消除
(派生)
,并拥有:

void Derived::run() {
    do_something_with_a_shared_ptr(THIS);
}
这可能吗

或者,在从
boost::enable_shared_from_this
派生的类中,是否有更好的方法方便地访问
shared_ptr
this
?似乎表明答案是否定的

类层次结构如下所示:

void Derived::run() {
    do_something_with_a_shared_ptr(THIS(Derived));
}
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>);
class-Base:public boost::从\u中启用\u共享\u{
...
}
派生类:公共基{
...
无效运行();
...
}
void do_something_与_a_共享_ptr(boost::shared_ptr);

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

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());
}
boost::shared_ptrshared_this()
{
return boost::static_pointer_cast(来自_this()的共享_);
}
boost::shared_ptrshared_this()const
{
return boost::static_pointer_cast(来自_this()的共享_);
}

请注意,如果您使用的是C++11,您可以基于decltype和此来做一些事情。阅读decltype和C++11非常有趣,谢谢。您的答案当然比使用宏要好,尽管如果我有几个派生类(我确实有),我需要重复这段代码。这些方法可以包含在派生继承的另一个类中,但我们有多重继承。这是一种方法还是可以用模板做些别的事情?你应该能够在
派生的
上创建
共享的
模板,在
基本的
中声明一次,并从你的每个不同的
派生的
类中使用它。非常好,这非常有效。从<代码>(派生)我现在有了<代码> SydDyStId()/Cuff>,它感觉更像C++,希望用<代码> DeCytys/Cudio>这可以更简单。非常感谢,我在这里学到了很多。我只是想,如果你在派生上共享这个模板,并将派生/派生常量指针作为参数,你可以将它传递给它,那么即使在C++03中,你也可以自动获取类型。导致
共享此(此)这对您来说可能更好,我宁愿坚持显式地声明类型。