У меня сейчас есть это:
#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
? Этот вопрос , кажется, указывает на то, что ответ на этот вопрос - нет.
Иерархия классов выглядит следующим образом:
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>);