J'essaie d'utiliser un unique_ptr
à la classe dérivée dans une fonction qui prend un unique_ptr
à une classe de base. Quelque chose comme :
class Base {};
class Derived : public Base {};
void f(unique_ptr<Base> const &base) {}
…
unique_ptr<Derived> derived = unique_ptr<Derived>(new Derived);
f(derived);
Si je comprends bien cette réponse correctement, ce code devrait fonctionner, mais il provoque les erreurs de compilation suivantes :
erreur C2664 : 'f' : impossible de convertir le paramètre 1 de 'std::unique_ptr<_Ty>' en 'const std::unique_ptr<_Ty> &'.
IntelliSense : il n'existe pas de conversion appropriée définie par l'utilisateur de "std::unique_ptr<Derived, std::default_delete<Derived>>" à "const std::unique_ptr<Base, std::default_delete<Base>>".
Si je change f
pour prendre unique_ptr<Derived> const &derived
cela fonctionne bien, mais ce n'est pas ce que je veux.
Est-ce que je fais quelque chose de mal ? Que puis-je faire pour contourner ce problème ?
J'utilise Visual Studio 2012.