C++ invoke explicit template constructor


¿Puede decirme cómo invocar constructor de plantilla explícitamente (en la lista inicializador)? por ejemplo:

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

struct U {
    U() : t<void>() {} //does not work
    T t;
};

Gracias

Author: Anycorn, 2010-05-07

1 answers

No Es posible. El Estándar también tiene una nota sobre esto en 14.8.1/7

[Nota: debido a que la lista de argumentos de plantilla explícita sigue el nombre de la plantilla de función, y debido a que las plantillas de función miembro de conversión y las plantillas de función miembro constructor se llaman sin usar un nombre de función, no hay forma de proporcionar una lista de argumentos de plantilla explícita para estas plantillas de función. ]

Si puedes vivir con él, puedes trabajar alrededor

struct T { 
    template<class U> T(identity<U>);
};

struct U {
    U() : t(identity<void>()) {}
    T t;
};

Dado identity como se define en boost

template<typename T> struct identity { typedef T type; };
 38
Author: Johannes Schaub - litb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-15 11:00:41