Actualmente estoy luchando con el siguiente código, cuya intención es implementar modelo modelos variadic variadic:variadic modelo modelos variadic
template
<
template <typename... HeadArgs> class Head,
template <typename... TailArgs> class...
>
struct join<Head<typename HeadArgs...>, Head<typename TailArgs...>...>
{
typedef Head<typename HeadArgs..., typename TailArgs......> result;
};
Idealmente, me gustaría ser capaz de utilizar esta plantilla para lograr metafunción la siguiente:
template <typename...> struct obj1 {};
template <typename...> struct obj2 {};
typedef join
<
obj1<int, int, double>,
obj1<double, char>,
obj1<char*, int, double, const char*>
>::result new_obj1;
typedef join
<
obj2<int, int, double>,
obj2<double, char>,
obj2<char*, int, double, const char*>
>::result new_obj2;
/* This should result in an error, because there are
different encapsulating objects
typedef join
<
obj1<int, int, double>,
obj1<double, char>,
obj2<char*, int, double, const char*>
>::result new_obj;
*/
la salida de los anteriores sería de esperar crear new_obj1
y new_obj2
en forma template<int, int, double, double, char, char*, int, double, const char*> struct new_obj[1|2] {};
Estoy usando gcc 4.6.2 en Windows, que genera un "paquete de parámetros esperado antes de '...'" para la expansión de "Head<typename TailArgs...>
...".
This error is reproducable with gcc 4.5.1.
El argumento * Nombre * dentro de la 'template' especificación del parámetro de plantilla plantilla es opcional y totalmente cosmética; en realidad no está disponible como un parámetro real. –
@KerrekSB ¿hay alguna forma de obtener los parámetros de un parámetro de plantilla de plantilla? – kmore
Edité mi publicación; Me faltaba el caso variódico. En respuesta a su pregunta: Sí, proporcionando un parámetro de plantilla explícito (paquete) y coincidencia. –