Ich habe eine Vorlage, die einen Typ für jede gegebene Bestellung im Bereich von 0
bis MaxOrder
bereitstellt.Größe des Parameterpakets in Template-Spezialisierung
template <class Graph, int Order> TypeHelper;
Dies ist notwendig, weil TypeHelper<Graph, k>
auf TypeHelper<Graph, 0>
abhängt, TypeHelper<Graph, k - 1>
und TypeHelper<Graph, k + 1>
.
Graph
ist eine variadische Vorlage, die als Container für den Typ Payload
für eine beliebige Reihenfolge dient.
template <class... Payloads> Graph;
Um Fach die Rekursion bei TypeHelper<Graph, 0>
und TypeHelper<Graph, MaxOrder>
diese zu beenden. Ersteres ist einfach, aber ich kann nicht herausfinden, wie man MaxOrder
aus der Anzahl der Typen in Payloads...
ableiten kann.
Eine naheliegende Lösung ist die Einführung von MaxOrder
als Vorlageparameter von Graph
.
Als Beispiel:
template <int MaxOrder, class... Payloads> Graph;
template <template <int, class...> class Graph, int MaxOrder, class... Payloads>
struct TypeHelper<Graph<MaxOrder, Payloads...>, MaxOrder>
Aber ich würde so etwas wie diese
template <template <class...> class Graph, class... Payloads>
struct TypeHelper<Graph<Payloads...>, sizeof...(Payloads)>
Aber das funktioniert nicht bevorzugen.
Weiterführende Literatur: Is sizeof... allowed in template arguments for specialization?
Irgendwelche Vorschläge?
Haben Sie 'Graph' als Template-Template-Parameter ableiten wollen, oder sollte Ist es der 'Graph', den Sie vorher definiert haben? – krzaq
Graph wird zuerst definiert und damit jeder Payload-Typ. –