Wusstet ihr, dass das funktioniert?
-
Hallo,
etwas echt Lustiges was ich zufällig herausgefunden habe:
template<typename T> struct CheckTmp { static constexpr bool Value = false; }; template<template<typename...> class Template, typename... ArgsT> struct CheckTmp<Template<ArgsT...>> { static constexpr bool Value = true; }; template<typename T> struct Foo { }; template<typename... T> struct Bar { }; int main() { static_assert(!CheckTmp<int>::Value, "not working"); static_assert(CheckTmp<Foo<void>>::Value, "not working"); static_assert(CheckTmp<Bar<char, double>>::Value, "not working"); static_assert(CheckTmp<Bar<>>::Value, "not working"); }Leider nicht perfekt, da Integrale, Zeiger, Referenzen und Templates als Template-Parameter nicht unterstützt werden, aber camper und Arcoth haben da schon eine Lösung.

Gruss
-
Jo, dass das Funktioniert wissen wir alle.
Ist durchaus nützlich wenn man e.g. testen will ob ein Typ eine Spezialisierung eines konkreten Templates ist.Leider nicht perfekt, da Integrale, Zeiger, Referenzen und Templates als Template-Parameter nicht unterstützt werden, aber camper und Arcoth haben da schon eine Lösung.
Nein, haben sie nicht. Siehe http://stackoverflow.com/questions/25893828/c-variadic-template-template-argument-that-matches-any-kind-of-parameters
-
Arcoth schrieb:
Jo, dass das Funktioniert wissen wir alle.
Ist durchaus nützlich wenn man e.g. testen will ob ein Typ eine Spezialisierung eines konkreten Templates ist."Gewöhnliche" partielle Spezialisierungen waren mir schon bekannt, nicht jedoch dass auch das Template, anhand welchem der Typ instanziiert wurde, auf diese Weise unabhängig gemacht werden kann.