*
audacia schrieb:
asc schrieb:
Wobei man auch sagen muss das beide Generics auf der einen, Templates auf der anderen Seite unterschiedliche Vorteile haben.
Ich glaube fast, das erwähnt zu haben
Ich spreche mich ja auch nicht gegen Templates aus. Aber für Dinge wie Container sind Generics schlicht besser geeignet.
C++/CLI hat bekanntlich beides (und ja, die Generics sind intern exakt gleich wie in C# oder Delphi, was auch ein Argument für sie ist, da man sie dann zwischen den Sprachen ohne Probleme hin und herschieben kann). Und beim Programmieren damit muss ich einfach sagen, dass es ziemlich auf die Situation ankommt, ob ich nun Generics oder Templates verwende. Gewisse Dinge lassen sich mit Generics schlicht nicht darstellen, etwa eine Collection von Zeigern auf PODs oder Funktionen. Oder eine Collection fixer Länge, da kannst du im Prinzip nur Templates benutzen, weil Generics nur Typen als Argumente nehmen. Somit ergeben sich dann immer wieder Fehler, welche einen Template-Benutzer überaschen mögen:
template<typename T>
ref struct Foo
{
typedef T export_t;
};
generic<typename T>
ref struct Bar
{
typedef T export_t;
};
int main()
{
Foo<int>::export_t A; // Wunderbar.
Bar<int>::export_t B; // Wunderbar.
Foo<int *>::export_t A_ptr; // Wunderbar.
Bar<int *>::export_t B_ptr; // BOOM. Das darf man nicht.
return 0;
}
In der Praxis läuft es nun meistens darauf hinaus, dass ich Generics benutze, wo ich kann und die Templates, wo ich muss. Das ist recht komfortabel, sobald man sich damit zurecht gefunden hat. Ich sehe die Generics und Templates inzwischen schon fast als sich ergänzende Techniken. Aber gerade einfacher gemacht hat es die Sprache bestimmt nicht, insofern muss ich der Sache mit den Diplomarbeiten zustimmen.
MfG