Comment implémenter la fonction make_unique en C ++ 11?

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