(gelöst)[C++] Template für alle enums spezialisieren

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Krishty
Establishment
Beiträge: 8267
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

(gelöst)[C++] Template für alle enums spezialisieren

Beitrag 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
Zuletzt geändert von Krishty am 08.12.2009, 11:17, insgesamt 1-mal geändert.
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: [C++] Template für alle enums spezialisieren

Beitrag von kimmi »

Kannst du mal genauer erklären, was du machen möchtest? Ich versteh gerade nicht, worauf du hinaus willst? Danke :).

Gruß Kimmi
Benutzeravatar
Krishty
Establishment
Beiträge: 8267
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [C++] Template für alle enums spezialisieren

Beitrag 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???
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Aramis
Moderator
Beiträge: 1458
Registriert: 25.02.2009, 19:50
Echter Name: Alexander Gessler
Wohnort: 2016
Kontaktdaten:

Re: [C++] Template für alle enums spezialisieren

Beitrag 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.
Helmut
Establishment
Beiträge: 237
Registriert: 11.07.2002, 15:49
Wohnort: Bonn
Kontaktdaten:

Re: [C++] Template für alle enums spezialisieren

Beitrag von Helmut »

Dieser Header sieht vielversprechend aus. Suche darin nach IsEnum ;)

Ciao
Benutzeravatar
kimmi
Moderator
Beiträge: 1405
Registriert: 26.02.2009, 09:42
Echter Name: Kim Kulling
Wohnort: Luebeck
Kontaktdaten:

Re: [C++] Template für alle enums spezialisieren

Beitrag 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
Benutzeravatar
Krishty
Establishment
Beiträge: 8267
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

Re: [C++] Template für alle enums spezialisieren

Beitrag von Krishty »

Mit dem Check auf implizite Konvertierung klappt es :)

Diesen Link habe ich auch noch gefunden, dort ist die Vorgehensweise auch kommentiert.

Danke!
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Antworten