Mon compilateur ne supporte pas make_unique. Comment en écrire un?
template unique_ptr make_unique( Args&&... args );
Copié à partir de make_unique et transmission parfaite (la même chose est donnée dans le blog de Herb Sutter )
template std::unique_ptr make_unique(Args&&... args) { return std::unique_ptr (new T(std::forward(args)...)); }
Si vous en avez besoin dans VC2012, voir Existe – t-il un moyen d’écrire make_unique () dans VS2012?
Néanmoins, si la solution de la réponse de sasha.sochka est compilée avec votre compilateur, je choisirais celle-là. C’est plus élaboré et fonctionne aussi avec les tableaux.
Version de Stephan T. Lavavej (également connu de STL) qui avait proposé à l’origine d’append cette fonction à C ++ 14
#include #include #include #include namespace std { template struct _Unique_if { typedef unique_ptr _Single_object; }; template struct _Unique_if { typedef unique_ptr _Unknown_bound; }; template struct _Unique_if { typedef void _Known_bound; }; template typename _Unique_if::_Single_object make_unique(Args&&... args) { return unique_ptr (new T(std::forward(args)...)); } template typename _Unique_if::_Unknown_bound make_unique(size_t n) { typedef typename remove_extent ::type U; return unique_ptr (new U[n]()); } template typename _Unique_if::_Known_bound make_unique(Args&&...) = delete; }
EDIT: code mis à jour selon la révision de la norme N3656