Intenté introducir algo de const
corrección (paradigmas realmente funcionales) a algún código nuevo y encontré que no puedo pasar un std::shared_ptr<A>
a una función que espera un std::shared_ptr<A const>
. Tenga en cuenta que no quiero lanzar distancia constness sino presentarlo, que es legal con punteros sin formato.¿Por qué no shared_ptr <A> convierte implícitamente a shared_ptr <A const>?
¿Hay alguna forma de evitar esto? No encontré una función de miembro para hacer esto.
El error precisa pronunciada por g ++ 4.6.1 es:
error: no matching function for call to ‘foo(std::shared_ptr<A>)’
note: candidate is:
note: template<class T> std::shared_ptr<_Tp> foo(std::shared_ptr<const _Tp>)
'std :: static_pointer_cast (p)' es otra forma de hacer una conversión explícitamente –
@Luc: ¿Por qué no 'std :: const_pointer_cast (p)'? –
Xeo
@ Xeo Porque no estamos eliminando cv-qualifiers. –