
Frank Mori Hess wrote:
It turns out it doesn't need to be implicitly convertible to shared_ptr at all, like I imagined before I read the mem_fn docs. It just needs a get_pointer function. I'm currently using a stripped down signals::tracked object that is just a thin wrapper around weak_ptr, with the following get_pointer function:
That is good news indeed.
template<typename T> T* get_pointer(const signals::tracked<T> &tracked) {return tracked.lock().get();}
I wouldn't use lock() but an explicit shared_ptr conversion here as you will probably want it to throw bad_weak_ptr when the client code uses a dead reference outside your signals functionality. I also realized that the abstract base class design is thankfully unnecessary as a shared_ptr<void> apparently knows what destructor to call when initialized from the correct pointer type (according to the docs). I'll see if I can find the time to commit sample code tonight. Regards Timmo Stange