c++ c++11 decltype

c++ - Usando nuevo con decltype



c++11 (2)

Si están en la misma línea, puedes usar auto para nombrar solo T una vez:

auto t = new T;

De lo contrario, podría crear una plantilla de función pequeña:

template <class T> void do_new(T * &p) { p = new T; } // Usage: int main() { T *t; do_new(t); }

Como señaló @MadScienceDreams, puede extender esto para permitir constructores no predeterminados:

template <class T, class... Arg> void do_new(T * &p, Arg &&... arg) { p = new T(std::forward<Arg>(arg)...); } // Usage: int main() { T *t; do_new(t); std::string *s; do_new(s, "Abc"); }

T *t; //T is an implementation detail t = new T; //want to avoid naming T to allow for flexibility t = new decltype(*t); //error: cannot use ''new'' to allocate a reference t = new std::remove_reference<decltype(*t)>::type(); //clunky

This responde por qué decltype(*t) devuelve T & y no T

Puedo poner mi última línea en una macro, pero eso parece subóptimo. ¿Hay una solución mejor que la que tengo hasta ahora? ¿Pertenece esto en Code Review ?


std::remove_pointer<decltype(t)>::type es más expresivo / claro.

También puede usar un typedef local si esto se repite varias veces, o haría que una determinada línea crezca excesivamente larga / complicada.