Ich implementiere einen Typ Extraktor extract_type<Class, nth-type>
für jede Vorlagenklasse. Eine Beispielverwendung ist wie folgt dargestellt:Einen Typ aus einer Vorlagenklasse extrahieren
template <int, short, float, double, char> class C;
extract_type<C, 0>::type => int
extract_type<C, 1>::type => short
extract_type<C, 2>::type => float
extract_type<C, 3>::type => double
extract_type<C, 4>::type => char
Hier ist meine Implementierung.
// extract_type: recursive definition.
template <template <typename...> class C, size_t idx, typename T, typename... RestT>
struct extract_type;
// extract_type: base
template <template <typename...> class C, typename T, typename... RestT>
struct extract_type< C<RestT...>, 0, RestT... > {
using type = T;
};
// extract_type: recursive definition.
template <template <typename...> class C, size_t idx, typename T, typename... RestT>
struct extract_type : public extract_type< C<RestT...>, idx-1, RestT... > {
};
jedoch der Compiler beschwert sich über
Typ/Wert Mismatch bei Argument 1 in Vorlage Parameterliste für ‚Template-Klasse C, lange unsigned int idx, Klasse T, Klasse ... RestT> struct Open :: extract_type‘ struct extract_type < ungültig, 0, RestT ...>
Wie kann ich dieses Problem gelöst werden?
Verwandte: http://stackoverflow.com/questions/16928669/how-to -get-n-th-type-from-a-tuple – kennytm
'template Klasse C' ist ein Template-Template-Parameter, der plötzlich zu einem Typ-Template-Parameter in einer räumlichen Zuordnung wird. Darüber hinaus sind '', das sind nicht-type Template-Parameter, so dass 'class C' nicht einmal mit' template class C' abgeglichen werden kann. –
Sind Sie sicher, dass Sie 'extract_type wollen ', und nicht' extract_type , 1> '? –