C++ Templates

Hi, also ich hab mal ne Frage zu Spezialisierten Template-Funktionen/Methoden,
und zwar kriege ich eine ganz normale Spezialisierung mit einem Template hin, aber folgender Code macht einen Fehler:
Code:
template<class Typ1,class Typ2,int I>
class House
{
	  protected:
													Typ1 m_Height;
													Typ2 m_Size;
													int m_Lenght;
			public:
										void SetSize(int Size);
										int GetSize(void);
};
template<class Typ1,class Typ2,int I>
void House<Typ1,Typ2,I>::SetSize(int Size)
{
	  m_Size=Size;
}
template<class Typ1,class Typ2,int I>
int House<Typ1,Typ2,I>::GetSize(void)
{
	  return m_Size;
}
template<int I>                     /*Ich will hier das die 2 Typen int sind, aber man darf I eingeben*/
int House<int,int,I>::GetSize(void)
{
	  return 99;
}
Ich will also, dass die letzte Methode auf zwei int spezialisiert wird (siehe Kommentar), aber meine allgemeine Frage ist, wie man mehrere Parameter spezialisiert, hab nämlich schon ziemlich viel probiert.
 
Also in Zeile 22 fehlt dir bei der templatedeklaration etwas.

Normalerweise müsste es wie auch oben schon

template <class Typ1,class Typ2, int I >

heißen.

Des Weiteren verstehe ich nicht ganz warum du deine Variablen für die Klasse in den protected Bereich schreibst.
Du kannst genauso gut einen private Bereich daraus machen indem du das Protected einfach weglässt oder eben an Stelle davon private schreibst.
 
Teilspezialisierung ist nur für Klassentemplates möglich. Du müsstest also die ganze Klasse neu spezialisieren. Übrigens wäre eine Fehlermeldung toll ;)
 
Original von Hadon
Also in Zeile 22 fehlt dir bei der templatedeklaration etwas.

Normalerweise müsste es wie auch oben schon

template <class Typ1,class Typ2, int I >

heißen.

Des Weiteren verstehe ich nicht ganz warum du deine Variablen für die Klasse in den protected Bereich schreibst.
Du kannst genauso gut einen private Bereich daraus machen indem du das Protected einfach weglässt oder eben an Stelle davon private schreibst.
Das mit dem protected: Es war ein Beispiel^^
template <class Typ1,class Typ2, int I > spuckt eine Fehlermeldung aus, und zwar: invalid use of undefined type `class House<int, int, I>'
Aber danke für die Antworten.
Mfg Kennie
 
Wie gesagt, das was du da versuchst geht so nicht. Du musst das ganze Klassentemplate neu spezialisieren:

Code:
template< int L >
class House< int, int, L >
{
    // . . .
    const int &GetSize() const;
};

template< int L >
const int &House< int, int, L>::GetSize() const
{
	  return 99;
}
 
Zurück
Oben