Test auf Instanz von Template



  • Ein naheliegender Test für "Ist T eine Instanz von Klassentemplate X" ist ja, jetzt einfach von SO kopiert:

    template<template<typename...> class X, typename T> struct instantiation_of : public std::false_type {};
    template<template<typename...> class X, typename... Y> struct instantiation_of<X, X<Y...>> : public std::true_type {};
    

    Damit kann man unter Umständen Funktionen für bestimmte Template-Argumente einfacher gestalten, weil man nicht die komplette Parameter-Liste wiederholen muss. Aber das funktioniert ja nicht für alle Templates...

    Gibt's denn irgendwelche Bestrebungen, dass Typ- und Integrale Parameter irgendwie in irgendeiner Form gleich behandelt werden können, sodass man solch ein Muster eben auch für wirklich alle Klassentemplates verwenden kann?



  • decimad schrieb:

    Ein naheliegender Test für "Ist T eine Instanz von Gibt's denn irgendwelche Bestrebungen, dass Typ- und Integrale Parameter irgendwie in irgendeiner Form gleich behandelt werden können, sodass man solch ein Muster eben auch für wirklich alle Klassentemplates verwenden kann?

    Interessante Frage 🙂 Dann müssten aber auch templates als mögliche template parameter dazu kommen. Dann wären könnten wir endlich beliebig zwischen den Meta-Ebenen wechseln 😉 Mein Vorschlag:

    template<template<thingy...> class X, thingy... Y> struct instantiation_of<X, X<Y...>> : public std::true_type {};
    

    Das würde aber dazu führen, dass ein thingy auch ein gültiger template Parameter sein müsste.


Anmelden zum Antworten