|
Boost : |
Subject: Re: [boost] [smart_ptr] Moving cast for unique_ptr
From: Karolin Varner (karo_at_[hidden])
Date: 2015-10-07 16:27:56
Hi
On 10/07/2015 09:45 PM, Peter Dimov wrote:
> Vicente J. Botet Escriba wrote:
>
>> Just wondering if we can not make dynamic_pointer_cast to work as your dynamic_moving_pointer_cast, when the parameter is a rvalue reference
>
> template<class T, class U>
> unique_ptr<T> dynamic_pointer_cast( unique_ptr<U> && r ) noexcept
> {
> T * p = dynamic_cast<T*>( r.get() );
> if( p ) r.release();
> return unique_ptr<T>( p );
> }
Agreed. That seems like the best option.
On 10/07/2015 09:03 AM, Gavin Lambert wrote:
> On 7/10/2015 19:16, Vicente J. Botet Escriba wrote:
>> Just wondering if we can not make dynamic_pointer_cast to work as your
>> dynamic_moving_pointer_cast, when the parameter is a rvalue reference
>
> It would theoretically be possible if you have access to the internals of shared_ptr (otherwise it would be no better than copying).
We do have access to the internals of the boost smart pointers, so we could provide a set of specialized moving casts for std::unique_ptr, boost::shared_ptr and boost::scoped_ptr.
For std::shared_ptr and the other pointers we might still emulate a moving cast in order to facilitate generic programming.
Best,
Karolin
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk