Vorlagen C ++ Funktionen





Funktionsschablonen c ++, c ++ Vorlagen Funktionen, template c ++

das Thema des wenig galt zuvor als Funktion Überlastung in C ++. Sie haben gelernt, über die Möglichkeit, mehrere Funktionen mit demselben Namen zu schreiben, die führen die gleichen Aufgaben. Der Hauptunterschied zwischen ihnen – Unterschrift (Parametertypen und / oder die Anzahl der Parameter). Wenn das Programm startet, der Compiler wählen, die der überladenen Funktionen anwenden (unter der Annahme,, dass an die Funktion übergeben)

Vorlagen können auch Funktionen verschiedene Arten von Daten zu handhaben, als Parameter übertragen. Aber es ist genug, um eine gemeinsame Definition einer Funktion zu schreiben. Sehen Sie, wie es aussieht.

Funktionsschablonen c ++, c ++ Vorlagen Funktionen, template c ++

Durch die Definition einer Funktion verwendet Vorlage wir C ++ reservierte Wörter: Vorlage und Modellname. Vorlage Es zeigt, das wird jetzt definiert Vorlage. Und in spitzen Klammern nach Modellname ein bedingter Name des Datentyps gegeben. hier, anstelle des Namens T, Sie können jede zuweisen (sehr wünschenswert richtig) Name.

Als nächstes wird die Funktion selbst bestimmt. Der Rückgabetyp angeben T. Parameter: die Anzahl der Typ T, Anzahl und Art der int. Diese Funktion findet die Anzahl und den Prozentsatz des Wertes in das Programm kehrt. Und die Zahl, und der Prozentsatz als Parameter übergeben. Zum Beispiel passieren der erste Parameter, den wir auf eine Integer-Funktion (100). Während der Inbetriebnahme, wird der Compiler beachten Sie, dass derzeit T Das int und ersetzen Sie die Template-Funktionen, die alle diese T von int. Somit hat der Compiler-Funktion die Form:

Funktionsschablonen c ++, c ++ Vorlagen Funktionen, template c ++

Wir sehen nicht eindeutig, aber es wird funktionieren. Unabhängig von der Zahl, haben wir nicht an diese Funktion als ersten Parameter übergeben, wird der Compiler eine Instanz einer Funktion Vorlage für alle Anruf erstellen. Dabei kann der erste Parameter eine beliebige Art von Daten sein,.

Als Ergebnis wird der Bildschirm das Ergebnis dieser Berechnung sehen:Funktionsschablonen c ++, c ++ Vorlagen Funktionen, template c ++

Sprechen über die Definition einer Funktion Vorlage, Ich möchte hinzufügen, in eckigen Klammern nach dem Schlüsselwort Vorlage möglich, mehrere herkömmliche Namen für die Datentypen aufnehmen. Warum würden Sie wollen,? Betrachten Sie dieses Beispiel:

Es ist notwendig, eine Funktion zu schreiben, die nehmen zwei Zahlen, bestimmen das Maximum von ihnen und bringt sie in das Programm. Lassen Sie uns beachten, diese Funktion können wir die Anzahl der verschiedenen Arten von passieren. Chance und Zufall, eine Zahl eine ganze Zahl, und die zweite – real. Sehen Sie, was passiert,:

Die ersten und zweiten Parameter werden definierte Funktion, wie die Typparameter T. Mit ruft Funktion in den Zeilen 19-20 kein Problem, da die Übertragungsparameter sind vom gleichen Datentyp. Probleme ergeben sich in der Leitung 22 kompilieren. Und das ist verständlich. Der Compiler wird verwirrt. Er kann nicht Typ umwandeln int in doppelt.

шаблоны функций c++, шаблоны функций с++, template c++

Um dieses Problem umgehen, ist es notwendig, eine andere Vorlage zu schreiben.

hier Typname T_1 zeigt den Typ des Parameters, die zu dem ersten Merkmal übertragen wird,. Typname T_2 jeweils gibt den Typ des zweiten Parameters. Diese Version der Template-Definition Funktionen warnen Fehler, bei der Übertragung von verschiedenen Arten von Parametern ergeb.

Funktionsschablonen c ++, c ++ Vorlagen Funktionen, template c ++

Es ist wichtig, daran zu erinnern,,wenn Sie in spitzen Klammern geben Ihnen ein paar Namen für konventionelle Typen von Funktionsparameter sind (in diesem Beispiel), Alle diese Arten von Namen sollte in der Signaturfunktion nennen. Ansonsten keine Fehler vermeiden beim Kompilieren. Zum Beispiel ist die Definition eines Templats

Funktionsschablonen c ++, c ++ Vorlagen Funktionen, template c ++

Es führt zu den folgenden Fehlern:

шаблоны функций c++, шаблоны функций с++, template c++

Die Vorlage wir definiert sie bedingte Typen T_1 und T_2, nur und die Unterschrift des vorgeschriebenen Typ T_1 .

In der Praxis können Sie die Definition einer Funktion Vorlage so treffen, wobei anstelle des Schlüsselwort Modellname Es verwendet das Wort Klasse. beispielsweise:

Funktionsschablonen c ++, c ++ Vorlagen Funktionen, template c ++

es entspricht der Definition von, wir betrachten

Funktionsschablonen c ++, c ++ Vorlagen Funktionen, template c ++

früher, vor dem C ++ 98-Standard, in Vorlagen verwendet immer das Wort Klasse. Wer ist besser, wenn es eine Schlüsselwort Modellname , besser, es zu benutzen. Wie es deutlicher ist schlägt, dass die Namen T_1 und T_2 Sie repräsentieren den Typ.

Zusammengefasst. Die Template-Funktion ist für eine verallgemeinerte Beschreibung der Funktion zu erstellen. Eine solche Funktion kann Parameter beliebigen Typs nehmen. Die Vorlage kann der Compiler Code für eine bestimmte Funktion zu erzeugen, wie beispielsweise (oder Arten) Daten, die wurde durch einen Aufruf an sie verwiesen.

Achten Sie darauf, das Video zu sehen. Über Vorlagen mit einer 14-minütigen:

Newsletter neue Lektionen:


Ich bin damit einverstanden, Nachrichten zu empfangen von purecodecpp.com auf meine E-Mail

Datum
Seite
Vorlagen C ++ Funktionen
Wertung
5

14 Gedanken zu "Vorlagen C ++ Funktionen

  1. Diese Frage, hier ist ein Beispiel, wo die Funktion nimmt zwei Argumente an die Parameter T1 und T2, Sie haben geschrieben,, dass die Funktion mit dem größeren Wert vom Typ T2 zurückkehren, und wenn es wäre eine größere Anzahl von, welches ein Parameter T1 ? Es ist implizit zum Typ T2 mit möglichen Datenverlust ??

    1. dass, im Beispiel der Rückgabewert vom Typ T1 gezeigt, und wenn der zweite Typ T2 Rückkehr, wird es eine implizite Konvertierung in T1 sein.
      Was geschieht als Ergebnis – es liegt in Ihrer Verantwortung zu schaffen … beispielsweise, Sie können eine explizite Konvertierung schreiben:

      return static_cast( second );

  2. Deshalb kann es nicht sein,?

    Vorlage
    T_1 FindMax(int, Doppel b)
    {
    ob (ein > b)
    Rückkehr ein;
    oder wenn (b > ein)
    Rückkehr b;
    sonst
    Rückkehr 0;
    }

  3. Vorlage
    T_1 FindMax(int, Doppel b)
    {
    ob (ein > b)
    Rückkehr ein;
    oder wenn (b > ein)
    Rückkehr b;
    sonst
    Rückkehr 0;
    }

  4. das heißt, so warum nicht?

    1. deshalb, Was gibt es Syntaxregeln, und es wird funktionieren einfach nicht syntaktische Kontrolle.
      Ein syntaktischen Muster Regeln sagen, dass Template-Typen werden in spitzen Klammern geschrieben.

      1. Webseite aß ein Stück Code, Deshalb kann es nicht sein,?

    1. So ist es unmöglich, aus vielen Gründen:
      – genannten Gattung, die in der Funktionssignatur verwendet werden (Dieser Satz ist in dem Text)
      – weil die Rückkehr (Rückkehr) verschiedene Typen, die Sie erlaubt sind, nur weil, was ist im Preis inbegriffen zulässige automatische Konvertierung – es ist eine schlechte Praxis…
      – besser bei der Rückkehr explizite Konvertierung zu schreiben:

      – und noch besser:

      1. P.S. dass, движок форума (пока?) съедает всё, что в угловых скобкахпоэтому я не могу вам правильно показать static_cast… , ну, в книжках посмотрите.

  5. beachten Sie (это не акцентировано в тексте), что всё, что связано с шаблонами (Funktion, классов) обрабатывается **препроцессором**, средствами макрообработки текстадо начала самой компиляции С++ все шаблоны раскрываются преобразованием кода.

Hinterlasse eine Antwort

Platz Code in Tags: <pre class="lang:c ++ dekodieren:true ">DEIN CODE</Vor>