Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » template frage, typ

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
04.03.2010, 14:52 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi,

hab folgende Frage,

ich habe eine entry class, deren "value" kann folgende typen haben: "std::string, int, double". dies ist über ein enum "type" festgelegt.

nun würd ich gern ein template zum "zurückgeben" nutzen,

also in der art


C++:
int foo = entry.getValue();

std::string bar otherentry.getValue();



ich möchte aber, das falls "type" eben nicht mit dem "typename" vom template übereinstimmt, er mir eine exception schmeißt.

Leider gibt es ja keine "typeof(T)"-funktion oder? Was schlagt ihr mir da vor, das ganze sollte möglichst knapp gehalten sein.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.03.2010, 19:04 Uhr
0xdeadbeef
Gott
(Operator)


www.boost.org/doc/libs/1_42_0/doc/html/variant.html ?

Ansonsten kannst du das entweder mit dem typeid-Operator oder Metafunktionen machen, etwa

C++:
enum type_map_id {
  id_string,
  id_int,
  id_double
};

template<typename> struct type_map { };
template<> struct type_map<std::string> { static type_map_id const id = id_string; };
template<> struct type_map<int        > { static type_map_id const id = id_int   ; };
template<> struct type_map<double     > { static type_map_id const id = id_double; };

// ...

template<typename T> your_variant const &your_variant::operator=(T const &x) {
  // vorheriges Zeug entfernen
  type = type_map<T>::id;
  // ...
}

template<typename T> T const &your_variant::get() const {
  if(type != type_map<T>::id) { throw stuff; }
  // ...
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 04.03.2010 um 19:05 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: