[C++-Studiennotizen] 1. Das Konzept und die grundlegende Verwendung von Vorlagen (und die Lösung für den Aufruf von „swap“ ist ein mehrdeutiger Fehlerbericht)

1. Vorlage

1.1 Das Konzept der Vorlage

Vorlagen sind die Grundlage der generischen Programmierung, bei der Code unabhängig von einem bestimmten Typ geschrieben wird.
Es kann auch als Bauplan oder Formel einer Funktion verstanden werden. Bibliothekscontainer wie Iteratoren und Algorithmen sind Beispiele für generische Programmierung und verwenden beide das Konzept von Vorlagen.

Eigenschaften: starke Vielseitigkeit

1.2 Vorlage

  • Eine weitere Programmieridee in C++ heißt generische Programmierung, und die wichtigste verwendete Technologie sind Vorlagen.

  • C++ bietet zwei Vorlagenmechanismen: Funktionsvorlagen und Klassenvorlagen

1.2.1 Syntax der Funktionsvorlage

Funktionsvorlagenrolle:

Um eine allgemeine Funktion zu erstellen, können ihr Funktionsrückgabewerttyp und ihr formaler Parametertyp nicht spezifisch formuliert werden, sondern durch einen virtuellen Typ dargestellt werden.

Grammatik:

template<typename T>
//函数声明或定义

Erläuterung:
template – Deklaration zum Erstellen einer Vorlage

Typname – das Symbol dahinter ist ein Datentyp, der durch eine Klasse ersetzt werden kann

T – allgemeiner Datentyp, der Name kann ersetzt werden, normalerweise in Großbuchstaben

Beispiel

/***************************************
*@File    :template.cpp
*@IDE     :CLion 
*@Author  :lingxiaotian
*@Date    :2022/9/14 19:37 
***************************************/

#include "iostream"
#include <string>
using namespace std;

//函数模板
template<class T>
//交换两个数的模板
void swapNumber(T &a,T &b){
    
    
    T temp = a;
    a = b;
    b = temp;
}
//整型交换
void test(){
    
    
    int a = 8;
    int b = 12;
    swapNumber(a,b);
    cout<<"交换后a的值是:"<<a<<endl;
    cout<<"交换后b的值是:"<<b<<endl;
}
//浮点交换
void test1(){
    
    
    float a = 100.86;
    float b = 124.01;
    swapNumber(a,b);
    cout<<"交换后a的值是:"<<a<<endl;
    cout<<"交换后b的值是:"<<b<<endl;
}
//字符串交换
void test2(){
    
    
    string a = "我原本是个a~";
    string b = "我他喵的是b啊!";
    swapNumber(a,b);
    cout<<"交换后a的值是:"<<a<<endl;
    cout<<"交换后b的值是:"<<b<<endl;
}

int main(){
    
    
    test();
    test1();
    test2();
}

Es ist ersichtlich, dass zu diesem Zeitpunkt nur eine Vorlage erforderlich ist, um den Austausch zweier Daten desselben Typs abzuschließen, ohne dass für jeden Datentyp eine Austauschfunktion geschrieben werden muss, was genau das Merkmal von Vorlagen ist – Universalität.

Wenn zu diesem Zeitpunkt die Funktion swapNumber () aufgerufen wird, wird sie automatisch auf den Typ des Parameters übertragen, und der Datentyp kann auch manuell angegeben werden.

Geben Sie den Datentyp manuell an

//字符串交换
void test2(){
    
    
    string a = "我原本是个a~";
    string b = "我他喵的是b啊!";
//手动指定数据类型
    swapNumber<string>(a,b);
    cout<<"交换后a的值是:"<<a<<endl;
    cout<<"交换后b的值是:"<<b<<endl;
}

Beim Schreiben dieses Falls ist ein Fehler aufgetreten. Der Code lautet wie folgt:

Fehlerfall

//函数模板
template<class T>
//交换两个数的模板
void swap(T &a,T &b){
    
    
    T temp = a;
    a = b;
    b = temp;
}
//整型交换
void test(){
    
    
    int a = 10;
    int b = 123;
  
    swap(a,b); //!!!此处报错,call to 'swap' is ambiguous!!
  
    cout<<"交换后a的值是:"<<a<<endl;
    cout<<"交换后b的值是:"<<b<<endl;
}
int main(){
    
    
    test();
}

Beim Aufrufen der Vorlagenfunktion swap () ist ein Fehler aufgetreten und die Fehlermeldung lautete: „Der Aufruf von ‚swap‘ ist mehrdeutig.“ Nach Recherchen wurde festgestellt, dass er mit dem Namen der Bibliotheksfunktion von C++ selbst in Konflikt stand, was der Fall war in swapNumber geändert und gelöst.

! Daher müssen Sie auf die Standardisierung der Benennung achten ~~

Ich denke du magst

Origin blog.csdn.net/w646645452/article/details/126859469
Empfohlen
Rangfolge