Diskussion:Template (C++)

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 7 Jahren von Moritzgedig in Abschnitt Container
Zur Navigation springen Zur Suche springen

AFAIK kann man funktionen mittels Templates spezialisieren. Allerdings fehlt mir im Moment gerade ein Beweismittel, und für nen Compiler-Lauf ist's im Moment zu spät. Weiß einer was genaueres? -- Helm 22:18, 1. Jun 2004 (CEST)

Ja, kann man auch. Nur eben nicht partiell, sondern nur vollständig. Leider. --RokerHRO 14:39, 7. Okt 2005 (CEST)

Titel; Inhalt[Quelltext bearbeiten]

In einer C++ Diskussion wurde ich auch diesen Artikel aufmerksam und schlage folgende Veränderung vor (ich kann sie aus Zeitmangel derzeit nicht selbst durchführen):

Ich habe bisher den Artikel über Templates ignoriert, weil das TCB-Problem C++-spezifisch ist und auch      
nicht durch intelligente Programmierung vermieden werden kann. Nur durch "Unterlassung von Templates"  
seitens des Programmierers oder durch extrem spezialisierte Compiler seitens des Compilerherstellers.

Und ich dachte das gehört nicht in einen Template-Artikel. Jetzt habe ich den mal überflogen un denke, er hat den falschen Titel. Templates sind ein in mehreren Sprachen (C++, Ada) verfügbares Programmierhilfsmittel. Genau darüber steht da nichts drin. Er enthält lediglich C++-Templates und sollte auch so heißen. Dann müsste es einen weiteren Artikel Ada-Templates geben und einen übergeordneten Templates (allgemein)

Partielle Spezialisierung?[Quelltext bearbeiten]

Die Partielle Spezialisierung der Klasse ist IMO vom Syntax her falsch oder zumindest veraltet. Zumindest auf den aktuellen Visual Studios muss es heißen:

template<int rows, int cols>
class CMatrix {
	// ...
};
 
template<int rows>
class CMatrix<rows, 1> {
	// ...
};

Kann das jemand bestätigen? -- LostSoul 23:33, 26. Jun 2006 (CEST)

Auch wenn dein Beiträg nicht mehr aktuell ist: Traue niemals deinem Compiler, um zu testen, ob dein Code standardkonform ist (das gilt für alle Compiler). Schlage es im Standard nach, oder teste auf mehreren Compilern. Gerade der VC++ ist bei Templates sehr liberal (das Schlüsselwort 'typename' kann an den meisten Stellen z.B. weggelassen werden, was eine Microsoft-Erweiterung ist).
Solltest du wirklich nur einen Compiler haben und keinen weiteren installieren können, schalte alle Flags in Richtung Standard. Beim GCC nutze ich: -pedantic -Wall -std=c++98
Smach 13:19, 12. Jan. 2009 (CET)Beantworten

Template / Web-Template[Quelltext bearbeiten]

Änderung rückgängig gemacht >> Revert. Web-Templates gehören nicht zu diesem Thema.

Hi, der von mir eingefügte Link gehört zwar nicht zur C-Problematik, aber ich hielt den Hinweis deshalb für angebracht, weil ich bisher unter Templates nur das verstand, was unter Web-Template beschrieben wird. Auch andere Bekannte kennen das Web-Template nur als Template. Oder wäre statt dem Link eine "Themenweiche" angebrachter? Ich wollte den Artikel zu Templates lesen, aber fand nur über die Suchfunktion herraus, daß das gewünschte Thema unter Web-Template steht. Das könnte auch anderen so gehen. Was meint Ihr dazu? --Beauty 14:09, 26. Jul 2006 (CEST)

Gibt es dazu keine Meinungen? Ist schon ein Jahr vergangen, als ich das ansprach. Vielleicht sollte ich einfach eine "Themenweiche" einbauen, aber dann befürchte ich, daß das nicht akzeptiert wird. --Beauty 16:25, 22. Aug. 2007 (CEST)Beantworten
Dieser Artikel steht in der Kategorie Programmiersprache C++, der über Web-Template in einer ganz anderen.

else unnötig?[Quelltext bearbeiten]

 if (x < y)
   return y;
 else
   return x;

ist das else in dem Beispiel nicht unnötig?

Jain. Die Funktion macht ohne else zwar das Gleiche, aber mit else wird IMHO klarer, was gemeint ist. --RokerHRO 22:59, 21. Mai 2008 (CEST)Beantworten

Namesgebung[Quelltext bearbeiten]

Wenn "Templateklasse" falsch ist und "Klassentemplate" richtig, dann sollte dies auch für "Templatefunktion" und "Funktionstemplate" gelten. Ich halte die Ausdrücke mit template hinten für richtig.

Ja, Klassentemplate und Funktionstemplate ist wohl der "richtigere" Begriff. Andersrum ist es aber auch üblich, und so lange das nicht für was anderes steht, ist es ja eiiiigentlich egal, wie man es nennt, so lange jeder versteht, was gemeint ist. Oder? --RokerHRO 22:56, 21. Mai 2008 (CEST)Beantworten
Vandevoorde/Josuttis empfiehlt (siehe hier):
template <typename T> Foo {}   // "Class Template"
template <typename T> T Foo () {}   // "Function Template"
Ich denke ihm kann man glauben. Smach 13:02, 12. Jan. 2009 (CET)Beantworten
Naja, mit 1:1-Übersetzungen sollte man vorsichtig sein. Wären die Kommentare z.B. auf französisch, würde die deutsche Übersetzung dann andersrum lauten. Ansonsten halte ich bei Benamungen eher an den Stroustrup oder gleich an den ISO-Standard. Beide schreiben aber von "class template" und "function template" (im Englischen übrigens klein geschrieben *G*) --RokerHRO 19:34, 12. Jan. 2009 (CET)Beantworten
Aber sie waren nicht auf französisch. Und auch Deutsch ist nicht auf Französisch. Nebenbei... "*G*" - - Smach 15:54, 14. Jan. 2009 (CET)Beantworten

"Schablonen"[Quelltext bearbeiten]

Ich halte es für falsch, C++-Begriffe ins Deutsche zu übersetzen, da es so etwas wie ein "deutsches C++" nicht gibt, und jemand, der sprachliche Probleme hat, wird wohl eher beim Programmieren daran scheitern, "Schablone" in "Template" zu übersetzen, als "Template" in "template".

Ein Hinweis, was ein Begriff auf deutsch wörtlich/sinnig bedeutet, reicht, denke ich, aus. Smach 13:10, 12. Jan. 2009 (CET)Beantworten

Naja, gegen behutsames Eindeutschen spricht ja nichts, sofern der deutsche Begriff verständlicher und/oder gebräuchlicher ist. Also so ist gegen "Funktion", "Ausnahme", "Rückgabewert" nichts einzuwenden. "Schablone" ist aber IMHO doch recht unüblich und unverständlich, ich bevorzuge auch das Wort "Template". :-) --RokerHRO 19:43, 12. Jan. 2009 (CET)Beantworten

Eine Klassenvorlage oder eine Vorlagenklasse bzw. Funktionsvorlage wäre eine passende deutsche Übersetzung, die auch hin und wieder zu lesen ist. Es spricht ja auch nichts dagegen, "Funktion" statt "function", "Klasse" statt "class" oder gar "Parameter" statt "parameter" zu verwenden, oder? Am sprachlich häßlichsten ist stets wahllos zusammengemischtes Deutsch/Englisch/Denglish und so weiter. Literarisch/sprachlich gesehen, müßte man jedenfalls den Artikel richtig eindeutschen, d.h. etwa schreiben: Funktionsvorlagen (engl: "function templates") sind bla bla .... (nicht signierter Beitrag von 89.183.12.58 (Diskussion) 13:50, 13. Jan. 2014 (CET))Beantworten

Gibt es Belege dafür, also deutschsprachige Fach-Literatur, die den engl. Begriff "template" ins Deutsche mit "Vorlage" übersetzt? Den deutschen Begriff "Schablone" meine ich bereits gehört/gelesen zu haben, auch wenn ich ihn unter deutschsprachigen Softwareentwicklern und -Architekten für wenig verbreitet halte. --RokerHRO (Diskussion) 23:45, 15. Jan. 2014 (CET)Beantworten
Und dann ersetzen wir auch noch "Threads" durch "Stränge" und "Desktop" durch "Schreibtisch". Irgendwann ist die kritische Grenze für sinnmachende Zwangseindeutschungen dann auch unterschritten.
Wird das irgendwo in der Literatur verwendet?--Plankton314 (Diskussion) 16:29, 17. Jan. 2014 (CET)Beantworten

QS[Quelltext bearbeiten]

Hallo, ich halte den Eintrag in der QS für sinnvoll, doch wenn wir es verallgemeinern, also alles von C++ entfernen, ist der Beitrag 2 Minuten später als SLA eingetragen. Aber wir können doch nicht jede Programmiersprache erwähnen?--Lancy 23:29, 20. Mai 2009 (CEST)Beantworten

C# und Java bieten keine Templates sondern Generics, die sind ja wohl nen Witz. Das heißt nur, dass die Objekte mit Argument-Typ automatisch gecastet werden und die Parameter-Listen anders aussehen. Das wäre das in C++:

 template<typename T>
 class GenericData
 {
   void* x;
 public:
   operator T*() { return dynamic_cast<T*>(x); }
   GenericData& operator=(T* _x) { x = _x; }
 };
 // Generische Klasse
 template<typename T>
 class GenericClass
 {
   GenericData<T> x;
   // x wird nun wie T* verwendet
 }

Templates können sehr viel mehr. Sie haben ihre Entsprechungen in D und Ada aber sicherlich nicht in C#, Java oder VB. Templates erzeugen Quellcode, Generic gaukeln nur Typsicherheit vor. Also mit Ada kenn ich mich nicht aus, D sollte erwähnt werden. --Chricho 19:56, 26. Mai 2009 (CEST)Beantworten

(teilweise) Zustimmung. Es muss unterschieden werden zwischen genereller generischer Programmierung und Templates. Generische Programmierung stellt das Konzept der typungebundenen Progammierung, wohingegen Templates eine konkrete Ausprägung der generischen Programmierung sind, wobei die Templates eben nunmal hauptsächlich in C++ zum Einsatz kommen. Die in anderen Sprachen vorkommenden Mechanismen zur generischen Programmierung sind i.d.R. nicht mit Templates vergleichbar. Von daher denke ich, dass der Artikel inhaltlich passt. Es sollte vielleicht maximal nur noch ein expliziter Hinweis darauf erfolgen, dass Templates nicht nur als Element der generischen Progammierung benutzt werden, sondern auch für die Template-Metaprogrammierung (der Link zu den weiterführenden Themen ist da nicht genug). Was auch fehlt ist ein Hinweis auf die Möglichkeit, statt einem Typenamen einen konkreten Typ in der Template-Definition anzugeben - hier besteht ein wichtiger Unterschied zu etwa den Generics in C# und dadurch wird auch die Mächtigkeit der Templates erzeugt. Das eben angesprochene wird zwar im Artikel benutzt (partielle Spezialisierung), aber nicht erklärt. (nicht signierter Beitrag von 91.39.110.120 (Diskussion | Beiträge) 22:28, 24. Jun. 2009 (CEST)) Beantworten

Wo ist da partielle Spezialisierung versteckt?[Quelltext bearbeiten]

template<>
int Example::frobnicate<int>()
{
   // Bla
}

Sollte doch klappen, das ist ja keine partielle Spezialisierung. Problematisch ists nur, wenn die Klasse selbst ein Template hat oder nur manche Parameter der Funktion spezialisiert werden sollen.

Das könnte man ja noch einbringen:

Eine andere Möglichkeit bieten Typzuordnungen, dabei wird die Überladung ausgenutzt:

class Example
{
private:
  template<typename T>
  T frobnicateImpl(T param, Type2Type<T>)
  {
    // do something
  }
  int frobnicateImpl(int param, Type2Type<int>)
  {
    // do something
  }
public:
  template<typename T>
  T frobnicate(T param)
  {
    return frobnicateImpl(param, Type2Type<T>());
  }
};

(nicht signierter Beitrag von Chricho (Diskussion | Beiträge) 20:29, 26. Mai 2009 (CEST)) Beantworten

Arten von Templateparametern[Quelltext bearbeiten]

Die im Artikel beschriebenen Templateparameter sind sogenannte "Typparameter". Es gibt in C++ aber auch noch "non-type template parameter". Sollten die hier auch Erwähnung finden? Wenn ja: Wo baut man die am besten ein? --RokerHRO

Erledigt. :-)

Nur C++?[Quelltext bearbeiten]

Der Artikel und all seine fremdsprachlichen Gegenstücke behandeln nur C++-Templates. Ich wäre dafür, den Artikel entweder entsprechend umzubenennen oder aber über andere Programmiersprachen mehr aufzunehmen, sofern das nicht in Generics besser aufgehoben ist. Was meint ihr? --RokerHRO (Diskussion) 13:32, 24. Dez. 2012 (CET)Beantworten

Ich wollte das auch gerade fragen. Da seit über zwei Jahren niemand was gegen hatte, mach ich das mal. dingensfünf 19:24, 14. Jul. 2015 (CEST)Beantworten

Container[Quelltext bearbeiten]

Nach dem ersten Satz stellt sich die Frage, was ein Container ist, diese wird im Folgenden nicht beantwortet. Einen unbekannten Begriff mit "ermöglicht einen anderen unbekannten Begriff" zu erklären ist nicht zielführend. Unter welchen Umständen ermöglicht ein Template einen Container? Warum nicht einfach: "Ein Template IST eine Typ unspezifische Beschreibung ... und dient somit als Vorlage für ..." --Moritzgedig (Diskussion) 13:51, 10. Dez. 2016 (CET)Beantworten