Seite 1 von 1
(gelöst)[C++] Template für alle enums spezialisieren
Verfasst: 07.12.2009, 15:36
von Krishty
Hi,
kann man ein Template so spezialisieren, dass es für alle enum-Typen verwendet wird?
Die unbeholfenen
Code: Alles auswählen
template <enum T> struct X { };
// und
template <> struct X<enum> { };
funktionieren schonmal nicht.
Gruß, Ky
Re: [C++] Template für alle enums spezialisieren
Verfasst: 07.12.2009, 15:52
von kimmi
Kannst du mal genauer erklären, was du machen möchtest? Ich versteh gerade nicht, worauf du hinaus willst? Danke :).
Gruß Kimmi
Re: [C++] Template für alle enums spezialisieren
Verfasst: 07.12.2009, 15:55
von Krishty
Code: Alles auswählen
template <typename T> struct IsInt { static const bool Is = false; };
template <> struct IsInt<int> { static const bool Is = true; };
template <typename T> struct IsEnum { static const bool Is = false; };
// ???Positive Variante???
Re: [C++] Template für alle enums spezialisieren
Verfasst: 07.12.2009, 17:51
von Aramis
Es ist nicht möglich, nur für enum-Typen zu spezialisieren.
Ich denke, du solltest aber in der Lage sein eine bestimmte Eigenschaft von Enums auszunützen: sie sind via Integral Promotion implizit nach int konvertierbar, aber nicht umgekehrt. Das trifft natürlich auch auf andere Typen (z.B. char) zu, diese kannst du aber durch vorherige Spezialisierungen ausschließen. SFINAE is your friend :-)
EDIT: Helmut's Link setzt genau das um.
Re: [C++] Template für alle enums spezialisieren
Verfasst: 07.12.2009, 17:53
von Helmut
Dieser
Header sieht vielversprechend aus. Suche darin nach IsEnum ;)
Ciao
Re: [C++] Template für alle enums spezialisieren
Verfasst: 07.12.2009, 18:20
von kimmi
Die MPL-Lib von Boost könnte eventuell ebenfalls etwas anbieten:
http://www.boost.org/doc/libs/1_41_0/li ... anual.html
Gruß Kimmi
Re: [C++] Template für alle enums spezialisieren
Verfasst: 08.12.2009, 11:17
von Krishty
Mit dem Check auf implizite Konvertierung klappt es :)
Diesen Link habe ich auch noch gefunden, dort ist die Vorgehensweise auch kommentiert.
Danke!