c++ boost c++11 shared-ptr

c++ - Cohabitación de boost:: shared_ptr y std:: shared_ptr



c++11 shared-ptr (1)

Quiero usar boost::log en algún momento, pero no puedo pasar std::shared_ptr como parámetro, porque el compilador (VS2010) no puede convertirlo en boost::shared_ptr .

Realmente no me gusta el hecho de que sean extraños el uno para el otro.

¿Existe una forma segura y transparente de convertir uno en otro, para que no se tropiecen entre sí?

No creo que sea un duplicado de esta pregunta que afirma que ambos son iguales.


Podrías hacerlo así:

template<typename T> boost::shared_ptr<T> make_shared_ptr(std::shared_ptr<T>& ptr) { return boost::shared_ptr<T>(ptr.get(), [ptr](T*) mutable {ptr.reset();}); } template<typename T> std::shared_ptr<T> make_shared_ptr(boost::shared_ptr<T>& ptr) { return std::shared_ptr<T>(ptr.get(), [ptr](T*) mutable {ptr.reset();}); }

EDITAR: Tenga en cuenta que esto no funciona con referencias débiles a la fuente ptr. ¡Así que ten cuidado con esos!