[C++] Template - erklärung gebraucht

Halo! Ich habe angefangen micht mit Templates aus ein ander zusetzen und verstehe etwas nicht.

Im folgenden Quelltext hat die Classe MyClass template stehen um mit assign auch andere Typen zu weisen zu können.

Wenn ich die eine Zeile weg lasse kann er es nicht mehr.
Kann mir jemand bitte genau erklären was die Zeile template bedeutet bzw. wie sie sich auswirkt ?

Vielen Dank!

template class MyClass // Hier wird eine Klasse angelegt. T ist ein beliebiger Typ
{
private: T value;

public:

template
void assign(const X &x)
{value=x;}
};

template class aClass // Hier wird eine Klasse angelegt. T ist ein beliebiger Typ
{
private: T value;

public:
void assign(const T &x)
{value=x;}
};

struct test
{
int a;
int b;
};

int main(int argc, char* argv[])
{
MyClass a;
MyClass d;
MyClass b;
test c;

c.a = 1;
c.b = 1;
a.assign(12);
b.assign©;
d.assign((int) 12);

return 0;
}
//---------------------------------------------------------------------------

Hallo Michael,

mit „template“ gibst Du bekannt, daß die betreffende
Klasse (oder aber Funktion) mit unterschiedlichen Typen arbeiten
kann (statt fest vorzugeben, daß sie z.B. mit int arbeiten muß).

Bei der Deklaration einer Variablen dieser Klasse muß der
Programmierer sich dann entscheiden, auf welchem Typ genau
die Operationen ausgeführt werden. Zu diesem Zeitpunkt wird
auch der Speicherplatz für genau diesen Typ reserviert.
D.h. bei MyClass wird für die Variable MyClass.value
der Speicher von der Größe eines Integers reserviert.
Von da an kommen auch die Operationen, die auf einen int
definiert wurden, zum Einsatz.

Wenn Du nun die Zeile „template“ weg läßt,
weiß der Compiler nicht, daß MyClass ein Template sein soll.
D.h., er geht davon aus, daß Du den Typ T irgendwo definiert
hast (entweder als Makro oder als typedef oder als Klasse/Struct). Da der Typ T aber nirgendwo definiert worden ist, bricht er nun mit der Fehlermeldung ab, daß der Typ T
nicht definiert worden ist (das hast Du nicht geschrieben,
aber ich gehe davon aus, daß das die Fehlermeldung ist).

So weit eine kurze Erklärung zu Templates,
hoffe, sie hat Dir weiter geholfen,

Lydia

Wenn ich die eine Zeile weg lasse kann er es nicht mehr.
Kann mir jemand bitte genau erklären was die Zeile template
bedeutet bzw. wie sie sich auswirkt ?

template
void assign(const X &x)
{value=x;}

Hi,
der Compiler wird f"ur jeden Typen, mit dem Du diese Schablone aufrufst, eine neue Klassenmethode, etwa in der Form assign_int, assign_float,… anlegen. Die Zeile wird gebraucht, um auf den Schablonencharakter hinzuweisen. Du k"onntest ja auch vergessen haben, die reale Klasse class X rechtzeitig zu deklarieren.

Bemerkung: Die Zuweisung value=x funktioniert nur, falls diese Operation zul"assig oder extra deklariert ist. Mit float value und int[] f"ur x wird das einen Fehler geben.

Ciao Lutz