Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Krishty
Establishment
Beiträge: 8350 Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:
Beitrag
von Krishty » 07.12.2009, 15:36
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
Zuletzt geändert von
Krishty am 08.12.2009, 11:17, insgesamt 1-mal geändert.
kimmi
Moderator
Beiträge: 1412 Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:
Beitrag
von kimmi » 07.12.2009, 15:52
Kannst du mal genauer erklären, was du machen möchtest? Ich versteh gerade nicht, worauf du hinaus willst? Danke :).
Gruß Kimmi
Krishty
Establishment
Beiträge: 8350 Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:
Beitrag
von Krishty » 07.12.2009, 15:55
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???
Aramis
Moderator
Beiträge: 1458 Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:
Beitrag
von Aramis » 07.12.2009, 17:51
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.
Helmut
Establishment
Beiträge: 237 Registriert: 11.07.2002, 15:49
Wohnort: Bonn
Kontaktdaten:
Beitrag
von Helmut » 07.12.2009, 17:53
Dieser
Header sieht vielversprechend aus. Suche darin nach IsEnum ;)
Ciao
Krishty
Establishment
Beiträge: 8350 Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:
Beitrag
von Krishty » 08.12.2009, 11:17
Mit dem Check auf implizite Konvertierung klappt es :)
Diesen Link habe ich auch noch gefunden, dort ist die Vorgehensweise auch kommentiert.
Danke!