2011-08-07 7 views
7

¿Tiene C++ 0x (o tenía C++ 0x en algún momento en el tiempo) la deducción del argumento de la plantilla para los constructores? En An Overview of the Coming C++ (C++0x) Standard, vi las siguientes líneas:deducción del argumento de la plantilla para los constructores

std::lock_guard l(m); // at 7:00 

std::thread t(f);  // at 9:00 

¿Quiere decir esto que delegar make_foo plantillas de función son finalmente redundante?

+1

Oh, espera, creo que confundí a los constructores de las plantillas de clase con las plantillas de constructor de clases ... sigue siendo una pregunta interesante, creo. – fredoverflow

Respuesta

14

La deducción de argumentos de la plantilla funciona para cualquier función, incluido el constructor. Pero no puede deducir los parámetros de la plantilla de clase de los argumentos pasados ​​al constructor. Y no, tampoco puedes hacerlo en C++ 0x.

struct X 
{ 
    template <class T> X(T x) {} 
}; 

template <class T> 
struct Y 
{ 
    Y(T y) {} 
}; 

int main() 
{ 
    X x(3); //T is deduced to be int. OK in C++03 and C++0x; 
    Y y(3); //compiler error: missing template argument list. Error in 03 and 0x 
} 

lock_guard y thread no son plantillas de clase. Sin embargo, tienen plantillas de constructores.

+0

Su publicación fue en 2011, pero para actualizar un poco la C++ 1y debería tenerla pronto: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3836.html look en el documento N3602 en la página (http://open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3602.html). – daminetreg

Cuestiones relacionadas