Frage

Kann eine Vorlagenvorlagenvariadik verwendet werden, um alle Fälle eines Vorlagenparameters zu erfassen, der selbst eine Vorlage ist?

Ich habe Vorlagen verwendet, um Debug -Ausgabe für einige vorlagenbasierte Methoden zu erstellen. Zunächst habe ich einen generischen Handler erstellt und ihn dann für native Typen spezialisiert:

template<typename... PARAMS> struct TypeList{};

template<typename TYPE> inline void ntype(ostream &out, TypeList<TYPE>) {
    out << typeid(TYPE).name();
}

template<> inline void ntype(ostream &out, TypeList<int>) {
    out << "int";
}

...

Dann habe ich versucht, ein zweites Vorlagenformat hinzuzufügen, um übergebene Vorlagentypen zu fangen:

template<typename ... SUB, template<typename...> class TYPE> void ntype(ostream &out, TypeList<TYPE<SUB...> >) {
    ntype(out, TypeList<typename TYPE>());
    out << '<';
    subtype(out, TypeList<SUB...>());
    out << '>';
}

Wobei der Subtyp eine Vorlagenmethode ist, mit der die Paramliste überholt ist und jeweils auf ntype () angewendet wird.

Das Problem ist, wenn ich versuche, dies mit etwas zu nennen, um:

ntype<SomeClass<int> >(out, TypeList<SomeClass<int> >());

Es stimmt immer nur mit der Funktion für generische erste Vorlagen überein - keine Kompilierungsfehler, aber es stimmt nie mit der Version der Vorlagenvorlage überein. Ich bin sicher, es ist nur ein Mangel an Verständnis für mich, aber die Google -Ergebnisse scheinen auf dem Boden sehr dünn zu sein, wenn es um klare Beispiele für Vorlagenvorlagen und sogar dünner in Bezug auf variadische Vorlagenparameter geht.

Kann jemand erklären, ob das, was ich versuche, überhaupt möglich ist und wenn ja, was ich falsch mache?

War es hilfreich?

Lösung

Es scheint, dass ich nur einen Tippfehler hatte - ich hatte hinzugefügt () nach einem meiner Typelisten in einer Funktionserklärung, wahrscheinlich von Kopie und Einfügen von einer Funktionsaufruf um 3 Uhr morgens, die das Missverhältnis verursachte.

Falls sich jemand wundert, ist es möglich, und das obige ist eine vollkommen akzeptable Möglichkeit, dies zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top