Jestem obecnie zmaga się z poniższym kodzie, którego intencją jest wprowadzenie zmiennej liczbie argumentów o zmiennej liczbie argumentów szablony Szablon:o zmiennej liczbie argumentów szablony o zmiennej liczbie argumentów szablonu
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;
};
Idealnie, chciałbym być w stanie korzystać z tego szablonu metafunkcji osiągnąć następujący:
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;
*/
wyjście z powyżej, z nadzieją tworzyć new_obj1
i new_obj2
w postaci template<int, int, double, double, char, char*, int, double, const char*> struct new_obj[1|2] {};
Używam gcc 4.6.2 w systemie Windows, który wyświetla "oczekiwany pakiet parametrów przed" ... "" dla rozwinięcia "Head<typename TailArgs...>
...".
This error is reproducable with gcc 4.5.1.
Argument * nazwa * wewnątrz 'template' specyfikacja argumentu szablon szablon jest całkowicie opcjonalne i kosmetycznych; tak naprawdę nie jest dostępny jako prawdziwy parametr. –
@KerrekSB jest jakiś sposób, aby uzyskać parametry parametru szablonu szablonu? – kmore
Edytowałem mój post; Brakowało mi przypadku variadic. W odpowiedzi na twoje pytanie: Tak, przez podanie jawnego parametru szablonu (pakietu) i dopasowania. –