Einführung in Funktionsschablonen in C++ im Rahmen der Lehre des Programmierens mit der Programmiersprache C++.
(C++, Template, Templates, function, Schablone, Funktionsschablone, Funktion, Schablonen, Funktionsvorlagen), Lektion, Seite 721228 https://www.purl.org/stefan_ram/pub/c++_funktionsschablone_de (Permalink) ist die kanonische URI dieser Seite. Stefan Ram ↑C++-Kurs
Funktionsschablonen in C++
Überladung eines Verbs
Eine Funktion soll das Maximum zweier ganzzahliger Werte berechnen.
maximum (Funktionsdefinition)
int maximum( int const a, int const b ){ return a > b ? a : b; }
Für das Verb »maximum« kann bei Bedarf auch noch eine Überladung zur Berechnung des Maximums von double-Werten definiert werden.
maximum (Funktionsdefinition)
double maximum( double const a, double const b ){ return a > b ? a : b; }
Vergleicht man die beiden Funktionsdefinitionen, so fällt auf, daß sie sich nur in ihrem Datentyp unterscheiden. In Falle von Wiederholungen in einem Programm, ist es immer wünschenswert, daß die gemeinsamen, sich wiederholenden, Teile nur einmal vorkommen.
Definieren einer Schablone
Die beiden Funktionsdefinitionen können tatsächlich durch eine einzige Funktionsdefinition ersetzt werden, für die der Datentyp offengelassen wird. Dazu muß dieser mit Hilfe einer Schablonenschreibweise abstrahiert werden.
maximum (Funktionsschablone)
template< typename T > T maximum( T const a, T const b ){ return a > b ? a : b; }
Anwendung einer Schablone
Die Funktionsschablone kann dann angewendet werden, indem der zuvor abstrahierte Datentyp bei der Verwendung wieder angegeben wird. So ist der Wert des Ausdrucks "maximum< int>( 10, 10 )" das Maximum der beiden int-Werte und der Wert des Ausdrucks "maximum< double >( 10., 10. )" ist das Maximum der beiden double-Argumente.
Man beachte, daß der Typ des gesamten Aufrufs auch jeweils der Typ der Argumente ist, also von den Typen der Argumente abhängt: Sind die beiden Argumente vom Typ "int", so ist auch der Wert der Anwendung vom Typ "int", sind die beiden Argumente vom Typ "double", so ist auch der Wert der Anwendung vom Typ "double".
Wenn der abstrahierte Datentyp aus dem Typ der Argumente gefolgert werden kann, dann ist allerdings keine Angabe nötig, so daß auch der Ausdruck "maximum( 10, 10 )" das Maximum der beiden int-Argumente und der Ausdruck "maximum( 10., 10. )" das Maximum der beiden double-Argumente ist.
error: deduced conflicting types for parameter 'T' ('double' and 'int')
Spezialisierungen
Durch eine Spezialisierung mit »template<>« kann eine spezielle Überladung für einen bestimmten Typ festgelegt werden, die dann bevorzugt verwendet wird, falls möglich.
int main() { print_type( 10 ); print_type( 10.0 ); }
Protokoll
unbekannt double
Allerdings hat hier eine gewöhnliche Überladung ohne »template<>« denselben Effekt. Auch hier werden speziellere Definitionen bevorzugt aufgerufen, falls möglich.
int main() { print_type( 10 ); print_type( 10.0 ); }
Protokoll
unbekannt double
Kombination mit »auto«
Um einen Operator durch eine Funktion nachzubilden, sollten zwei unterschiedliche Typen verwendet werden, da ein Operator auch mit unterschiedlichen Typen aufgerufen werden kann. Außerdem kann keine dieser beiden Typen als Ergebnistyp verwendet werden, vielmehr muß »auto« verwendet werden, um den Typ der Operatoranwendung zu übernehmen.
mul.txt
template< typename T, typename U >auto mul( T x, U y ){ return x * y; }
GCC/clang »__PRETTY_FUNCTION__«
Die Erweiterung (kein Standard-C++!) »__PRETTY_FUNCTION__« (MSVC: »__FUNCSIG__«) ist bei einigen C++-Implementationen zu finden und erlaubt die Anzeige der Schablonenargumentbesetzungen bei der Anwendung einer Schablone.
template<typename T> void f( T x ) { ::std::cout << __PRETTY_FUNCTION__ << '\n'; }
int main() { int a = 2; f( 2 ); f( a ); f( 2.3 ); f( "2.3"s ); f( __PRETTY_FUNCTION__ ); }
Protokoll
void f(T) [with T = int] void f(T) [with T = int] void f(T) [with T = double] void f(T) [with T = std::__cxx11::basic_string<char>] void f(T) [with T = const char*]
Man könnte dies auch verwenden, um den Typ eines Ausdrucks zu bestimmen, jedoch gibt es bei der Typableitung für Schablonen einige Sonderregeln, die man dann noch kennen sollte. Daher ist der oben angezeigte Typ »const char*« nicht ganz korrekt. Außerdem wurde die Bedeutung der Schreibweise »std::__cxx11::basic_string<char>« im Kurs bisher noch nicht behandelt, gemeint ist damit aber tatsächlich »::std::string«!
Übungsfragen
? Übungsfrage
Übungsaufgaben
/ Übungsaufgabe
Implementieren Sie ein Verb »abs_d« zur Berechnung des Betrags eines Wertes »x« vom Typ double oder int, so daß der Typ von »abs(x)« der Typ »double«.
/ Übungsaufgabe
Implementieren Sie ein Verb »abs_p« zur Berechnung des Betrags eines Wertes »x« vom Typ double oder int, so daß der Typ von »abs(x)« der Typ von »x« ist.
/ Übungsaufgabe
Implementieren Sie ein Verb »println«, die einen ihr übergebenen Wert ausgibt und die Ausgabe mit einem Zeilenende abschließt. Der Argumentausdruck jener Funktion soll den Typ »int«, »double« oder »string« haben können (darüberhinaus dürfen andere Typen aus akzeptiert werden).
/ Übungsaufgabe
Überarbeiten Sie das Verb »println« so, daß bei Verwendung eines Arguments vom Typ »::std::string«, die ausgegebene Zeichenfolge in Anführungszeichen erscheint.
Seiteninformationen und Impressum | Mitteilungsformular | "ram@zedat.fu-berlin.de" (ohne die Anführungszeichen) ist die Netzpostadresse von Stefan Ram. | Eine Verbindung zur Stefan-Ram-Startseite befindet
sich oben auf dieser Seite hinter dem Text "Stefan Ram".) |
Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten.
Diese Seite ist eine Veröffentlichung von Stefan Ram.
Schlüsselwörter zu dieser Seite/relevant keywords describing this page:
Stefan Ram Berlin slrprd slrprd stefanramberlin spellched stefanram721228 stefan_ram:721228
C++, Template, Templates, function, Schablone, Funktionsschablone, Funktion, Schablonen, Funktionsvorlagen
source, source code,sourcecode,
Programmier sprache C++ Sprache,
C++, CXX, C+, Programm, Programme,
C++-Programm C++ Sprache C++ Programmiersprache C++
c++-Programme, Standard C++,
Programmieren in C++,
Programmieren in CXX,
Programmieren in CPP,
Programmieren in Cplusplus,
Die Programmiersprache C++,
Die Programmiersprache CXX,
Die Programmiersprache CPP,
Die Programmiersprache Cplusplus,
Die Programmier sprache C++,
Die Programmier sprache CXX,
Die Programmier sprache CPP,
Die Programmier sprache Cplusplus,
CXX-Programmierung,
C++-Programmierung,
CPP-Programmierung, c-plus-plus,
cpluplus-Programmierung,
ANSI-C++, ANSI-CXX, ANSI-CPP, ANSI C++, ANSI CXX, ANSI-cpluscplus
ISO-C++, ISO-CXX, ISO CPP, ISO C++, ISO CXX,
ISO/IEC-C++, ISO/IEC-CXX, ISO/IEC CPP, ISO/IEC C++, ISO/IEC CXX,
IEC-C++, IEC-CXX, IEC CPP, IEC C++, IEC CXX,
International Standard ISO/IEC 14882 First edition 1998-09-01,
ISO/IEC 14882:1998(E),
ISO/IEC 14882:2003(E),
ASC X3, 7/27/98,
c plus plus, C ++,
cplusplus, c plus plus,
Standard C+ programmieren, Stamdard C++ programmieren,
Standart C+ programmieren, Stamdart C++ programmieren,
INCITS/ISO/IEC 14882-1998,
Information Technology - Programming Languages - C++ (formerly ISO/IEC 14882-1998),
Programmieren in C++,Programmiersprache C++ CPP CXX Cplusplus c plus plus
International Standard ISO/IEC 14882 First edition 1998-09-01,
Softwareentwicklung, Software-Entwicklung, Software Entwicklung,
Softwareprogrammierung, Software-Programmierung, Software Programmierung,
Softwareherstellung, Software-Herstellung, Software Herstellung,
Softwareerstellung, Software-Erstellung, Software Erstellung,
Softwareengineering, Software-Engineering, Software Engineering,
Softwareenginering, Software-Enginering, Software Enginering,
Softwaremethodik, Software-Methodik, Software Methodik,
Programmiermethodik, Programmier-Methodik, Programmier Methodik,
Softwaredidaktik, Software-Didaktik, Software Didaktik,
Methodik des Programmierens,
Didaktik des Programmierens,
Fachdidaktik des Programmierens, Fach-Didaktik des Programmierens,
Programmieren, Programmierung,
Computer Science, Informatik,
Informatik, Informationspädagogik, Informationspaedagogik,
Programmierer, programmieren, Quellcode, Quelltext, Quelle, Quellen,
Informatiker, Fachinformatiker, Entwickler, mit Stil, mit Stiel, mit Still,
,
Einführung, Einfuehrung, Einführungen, Einfuehrungen, eLearning-Modul, e-Learning-Modul, eLearning-Module, e-Learning-Module, Kurs Berlin, Kurse Berlin, Kursus, Vortrag, Vorträge, Vortraege, Lehrgang, Lehrgänge, Lehrgaenge, kostenloses Lehrmaterial, kostenlose Lehrmaterialien, Vorlesung, Vorlesungen, Unterrichtseinheit, Unterrichtseinheiten, kostenloses Unterrichtsmaterial im Internet, kostenlose Unterrichtsmaterialien im Internet, Ausbildung, Ausbildungen, für die Ausbildung, Fortbildung, Fortbildungen, Weiterbildung, Weiterbildungen, Schulung Berlin, Schulungen Berlin, Internetschulung, Webschulung, Kursunterlage, Kursunterlagen, trainer Berlin, Didaktik, Informatikunterricht, Primer, Skript FH, Skripte FH, Skriptum FH, Skripts FH, Script FH, Scripte FH, Scriptum FH, Scripts FH, howto, how-to, how to, Lehrbuch, Buch, Bücher, Buecher, Bericht, Crash Kurs Berlin, Crash-Kurs Berlin, Crashkurs Berlin, Report, Sachtext, Sachtexte, Übung, Übungen, Uebung, Uebungen, course, PbclevtugFgrsnaEnz,
lecture note, lecture notes, Tutorial, Tutor, Tutorium, Teacher, Lehrer Berlin, Trainer Berlin, Beratung Berlin, Anleitung zum, Anleitungen zum, Einführung, Einfuehrung, Einführungen, Einfuehrungen, Handbuch für, Handbücher, Handbuecher, Support, Diplomarbeit, Facharbeit, Hausarbeit, Hausarbeiten, Werk, Werke, Text, Übungsblatt, Uebungsblatt, Lösung, Loesung, Lösungen, Loesungen, Auflösung, Aufloesung, Auflösungen, Aufloesungen, Facharbeit, Facharbeiten, Forum, Training, manual, Folie, Folien, Lehrmittel, beratung,
Definition von, Allgemeine Erklärung, Allgemeine Erklaerung, Allgemeine Erklärungen, Allgemeine Erklaerung, Allgemeine Erklaerungen, Einfache Erklärung einfach, Einfache Erklaerung einfach, Einfache Erklärungen, Einfache Erklaerung, Einfache Erklaerungen, zum Thema, FAQ, FAQs, Konzept, Lernkurs, Lern-Kurs, Lernkurse, Lern-Kurse, eine kurze Erklärung, Begriff, Begriffe, Erklärung zu Begriffen, begriffbestimmung, begriffbestimmung, Begriffsbestimmung, Begriffserklärung, Begriffserklaerung, Wort, Worterklärung, Worterklaerung, Definition, Beispiel, Beispiele, Bedeutung, Bedeutungen, was bedeutet, Begriffsdefinition, für Anfänger, fuer Anfaenger, für Einsteiger, für Beginner, zum selber Lernen, handout, hand out, web based training,
WBT,
Net Based Training,
NBT,
computer based training,
CBT,
virtual learning environment,
virtual university,
für die Schule, Seminar, Seminare, Vorgehensweise, Pädagogik, Paedagogik, Akademie,
Onlineacademie,
Onlineakademie,
Wissen,
Unterrichtsvorbereitung für das Fach, Unterricht, für Lehrer, für Lehrerinnen, Referat,
Referate,
Hausaufgabe,
Hausaufgaben, Tip,
Tipp.
Tipps und Tricks,
Tips und Tricks, Methode,
Methoden,
Methodik, Funktion,
Funktionsweise,
Aufbau,
Prinzip,
Grundlage,
Grundlagen, Internetschulung,
Unterlage,
Unterlagen, Struktur,
Frage,
Fragen,
Antwort,
Antworten,
Schulunterricht,
zum erlernen,
was ist das?,
wie?,
lerne,
Onlineausbildung,
Onlinelehrgang,
Onlinekurs,
Onlinebuch,
Webbuch,
Academy,
Fachhochschule,
FH,
TFH,
Hochschule,
Universität,
Universitaet,
Uni,
Schule,
Berufsschule,
Gymnasium,
Erste Schritte mit,
Dozent,
Dozenten,
Zusammenfassung,
Übersicht,
Term,
Fachwort,
Fachbegriff,
Fachbegriffe,
Grundbegriff,
Grundbegriffe,
Lektion,
Lektionen,
Bedienungsanleitung,
Bedienungsanleitungen,
Spezialist,
Spezialisten,
Coaching,
Coach,
Fachbuch,
technologie,
Unterschied zwischen,
Unterschiede zwischen,
lehren,
unterrichten,
für das Studium,
für Studenten,
für Studentinnen,
für Studierende,
für Schüler,
für Schülerinnen,
Wie kann ich,
Wie kann man,
Hilfe,
selber,
erstellen,
Erstellung,
Beginner,
Online-Seminar,
Online-Kurs,
Online-Schulung,
ich,
gebrauchsanweisung,
gebrauchsanleitung,
Bedienungsanweisung,
Einweisung,
Kurzinfo,
Internet-Kurs,
Internet-Kurse,
Online-Training,
Intensiv,
Intensivkurs,
Vortragsreihe,
Präsentation,
Grundzüge,
Mitschrift,
Mitschriften,
Verständnis,
verstehen,
anwenden,
Hintergrundwissen,
Hintergrund,
Hintergründe,
content,
Funktionsprinzip,
Schritt für Schritt;
E-Learning;
elearning;
online learning;
Fernlehre,
Fernlehrgang,
Fernlehrgänge,
Referent,
Referenten,
Fernkurs,
Fernkurse,
Fernstudium,
Fernschule,
Fernuniversität,
Fernlehrer,
Denken,
Qualifizierungsmaßnahme,
Qualifizierung,
Qualifizierungen,
Volkshochschulkurs,
Volkshochschulkurse,
Internet-Learning-Plattform,
Online-Learning-Plattform,
E-Learning-Plattform,
Internetlearning-Plattform,
Onlinelearning-Plattform,
Elearning-Plattform,
jetzt,
Kochbuch,
einfach erklärt,
Kenntnis,
Kenntniss,
Kenntnisse,
deutsche Hilfe,
lernen und verstehen;
blended learning;
courseware,
Profi,
Profis,
professionell,
professionelle,
professionelles,
profesionell,
profesionelle,
profesionelles,
professionel,
gekonnt,
für Könner,
Grundkurs,
Leistungskurs,
Aufbaukurs,
Lehrtext,
Lehrtexte,
Fachtext,
Fachtexte,
Ausarbeitung,
distance learning,
Online Seminar,
distance education,
Online Tutorium,
Online Tutorien,
technology-based learning,
Computer based learning,
CBL,
Internet Based learning,
IBL,
Web based learning,
WBL,
online-learning,
OL,
online-training,
OT,
CAI,
Computer Assisted Instruction,
CUU,
Computerunterstützter Unterricht,
Computer-unterstützter Unterricht,
Know how,
Grundkenntnis,
Grundkenntnisse,
Kompetenz,
Schulungsunterlagen,
Insiderwissen,
Rat,
Lehrerinnen und Lehrer,
ABC,
Überblick,
Arbeitsblatt,
Sekundarstufe,
Oberstufe,
Material,
Materialien,
Unterrichtsentwurf,
Unterrichtsentwürfe,
Lerntip,
Lerntips,
Lerntipp,
Lerntipps,
ebook,
schnell lernen,
Lerner,
Lernender,
Lernende
Erwachsenenbildung,
Frage und Antwort,
Selbststudium,
Selbstudium,
Umschulung,
,
kostenlos, kostenlose, kostenloses,
kosten los, kosten lose, kosten loses,
gratis,
free, frei, freie, freies,
privat, private, privates, homepage, home-page, home page,
website, web site, webpage, web-page, web page, webpages, web-pages, web pages, webseite,
Web-Seite, Webseite, Webseiten, Web-Artikel, Web Artikel,
online, on-line, on line,
download downloaden, down load, or,
deutsch, deutsche, deutsches, deutscher,
Deutschland, deutschsprachig, deutschsprachige, deutschsprachiges,
german, germany, and,
uebersicht, Uerbersicht, uebersichten, Uebersichten,
Übersicht, übersicht, Übersichten, übersichten,
Uebersicht, uebersicht, Uebersichten, uebersichten,
Info, Infos zu, Information über, ueber, Informationen über,
Auskunft, Auskünfte, Auskuenfte,
Dienst, PbclevtugFgrsnaEnz,
Angebot, Angebote, Anbieter,
server, für, fuer, in, an, keyword, keywords, key word, keywords,
internet, internets, net, network, net work, networks, net works,
web, www, world wide web,
Theorie, Praxis, Anwendung, DV, IT, glossar, fachwörterbuch it-glossar,
computer lexikon, Computerlexikon, Computer-Lexikon, Lexikon,
computer lexicon, Computerlexicon, Computer-Lexicon, Lexicon,
2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012,
2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023
was ist ein, was ist das, was sind, definiere, definition, define,
Inhalt, html, xhtml, free im netz, PDF
Text, digital, digitale, binär, binäre, elektronisch, elektronische,
fachbegriff, fachbegriffe, konzept, Begriff, allgemein, allgemeine, allgemeines,
Technik, Datentechnik, Digitaltechnik, Binätechnik, online lesen;
,
Stefan Ram, Berlin, and, or, near, uni, online,
slrprd, slrprdqxx, slrprddoc, slrprd721228, slrprddef721228, PbclevtugFgrsnaEnz
Erklärung, Beschreibung, Info, Information, Hinweis,
Der Urheber dieses Textes ist Stefan Ram. Alle Rechte sind vorbehalten.
Diese Seite ist eine Veröffentlichung von Stefan Ram.
https://www.purl.org/stefan_ram/pub/c++_funktionsschablone_de