Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » structure als template und typedef

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
05.10.2007, 17:09 Uhr
~uiuiui
Gast


Hallo,

ich versuche im Moment so etwas:


template <class T>
struct CACHE
{
T* A;
T* t;
T* mk;
int size;
int vec_row;
};
typedef unsigned int U_Int32;
typedef U_Int32 Key;

typedef std::pair< Key, CACHE> Cache_Pair;



Code:
Der Compiler-Fehler lautet:
Cache.h:74: Fehler: Typ/Wert des Arguments 2 passt nicht in Template-Parameterliste für »template<class _T1, class _T2> struct std::pair«
Cache.h:74: Fehler:   einen Typ erwartet, »CACHE« erhalten    




Kann ich denn mit Template-Typen keine std::pair definieren?
Falls nicht - wie könnte ich an das Problem ran gehen?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
05.10.2007, 17:59 Uhr
Blubber2063



Doch aber du musst doch den Cache parameterisieren.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
05.10.2007, 18:04 Uhr
~uiuiui
Gast


Naja,

ich kann doch nicht irgendwo über eine Klasse ein


C++:
typedef std::pair<Key, CACHE<T> > Cache_Pair;



hinschreiben weil doch der Template Typ nicht definiert ist. Zumindest schreit mein Compiler dann.

Ich kann natürlich überall wo ein Cache_Pair stehen soll diesen großen Ausruck hinschreiben.

Was ich aber wollte ist, diesen großen Ausdruck einfach als Cache_Pair aufgreifen zu können über ein typedef....geht das überhaupt?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
05.10.2007, 18:37 Uhr
Blubber2063



Nein das kann nicht gehen weil du das typdef nicht parameterisieren kannst, willst du dir hier was bauen wirst du wohl ein macro bauen müssen das den Typ vom Cache dann vervollständigt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
05.10.2007, 22:31 Uhr
0xdeadbeef
Gott
(Operator)


Template typedefs gibts nicht. Was du aber machen kannst, ist, innerhalb von templates typedefs zu definieren. Das sieht dann zum Beispiel so aus:

C++:
template<typename T>
struct cache
{
  T* A;
  T* t;
  T* mk;
  int size;
  int vec_row;
};

// Für 32 bit unsigned int gibts bereits ein alias
typedef uint32_t key_t;

template<typename T> cache_types {
  typedef std::pair<key_t, cache<T> > pair;
}

// ...

cache_types<int>::pair foo;


...in diesem Fall wär auch denkbar,

C++:
typedef uint32_t key_t;

template<typename T>
struct cache
{
  T* A;
  T* t;
  T* mk;
  int size;
  int vec_row;

  typedef std::pair<key_t, cache> pair;
};

// ...

cache<int>::pair foo;


zu schreiben.

Wichtig zu verstehen ist, dass eine Klassenvorlage keine Klasse, sondern eben eine Vorlage ist, die erst durch Konkretisierung zu einer Klasse wird - und std::pair erwartet da halt eine Klasse als Parameter, keine Vorlage.
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 05.10.2007 um 22:33 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.10.2007, 15:01 Uhr
xXx
Devil


hmm VC++ 2005 schluckt
C++:
template<typename T> cache_types {
  typedef std::pair<key_t, cache<T> > pair;
}

nicht oO
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
07.10.2007, 16:02 Uhr
0xdeadbeef
Gott
(Operator)



C++:
#include<utility>


vergessen?
--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
07.10.2007, 16:07 Uhr
Tommix



"Schluckt nicht" ist eine sehr informative Fehlerbeschreibung...

C++:
template<typename T> struct cache_types {
  typedef std::pair<key_t, cache<T> > pair;
};



- Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
07.10.2007, 17:42 Uhr
xXx
Devil


hmm tjo als struct geht das natürlich ... aber dachte beefy meinte jetzt irgendnen Phänomen das ich noch nicht kenne ^^
 
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: