Heim > Backend-Entwicklung > C++ > Kann eine Funktionsüberladung in C basierend auf dem Rückgabewert erreicht werden, und wenn ja, wie?

Kann eine Funktionsüberladung in C basierend auf dem Rückgabewert erreicht werden, und wenn ja, wie?

Barbara Streisand
Freigeben: 2024-11-28 21:59:12
Original
826 Leute haben es durchsucht

Can Function Overloading in C   Be Achieved Based on Return Value, and if so, How?

Funktionsüberladung durch Rückgabewert überschreiben

Einführung

Funktionsüberladung in C beinhaltet typischerweise die Differenzierung von Funktionen anhand ihrer Parametertypen . Es ist jedoch auch möglich, Funktionen anhand ihrer Rückgabewerte zu überladen. Dadurch können Sie Funktionen definieren, die je nach Verwendung unterschiedliche Datentypen zurückgeben.

Problemstellung

Betrachten Sie die folgende Aufgabe:

int n = mul(6, 3); // n = 18
std::string s = mul(6, 3); // s = "666"
Nach dem Login kopieren

Hier müssen Sie eine Funktion namens mul definieren, die je nach Rückgabewert entweder eine Ganzzahl oder eine Zeichenfolge zurückgibt verwendet.

Lösungsansätze

Explizite Typisierung:

Ein Ansatz besteht darin, die Aufrufe explizit durch Typisierung zu unterscheiden. Sie könnten beispielsweise zwei separate Funktionen definieren:

int mul(int, int);
std::string mul(char, int);
Nach dem Login kopieren

Und sie wie folgt aufrufen:

int n = mul(6, 3); // n = 18
std::string s = mul('6', 3); // s = "666"
Nach dem Login kopieren

Dummy-Zeiger:

Andere Bei dieser Methode wird jeder Funktion ein Dummy-Parameter hinzugefügt, wodurch der Compiler gezwungen wird, den richtigen Parameter auszuwählen. Zum Beispiel:

int mul(int *, int, int);
std::string mul(std::string *, char, int);
Nach dem Login kopieren

Und verwenden Sie sie mit:

int n = mul((int *) NULL, 6, 3); // n = 18
std::string s = mul((std::string *) NULL, 54, 3); // s = "666"
Nach dem Login kopieren

Vorlage des Rückgabewerts (Option 1):

Sie können erstellen eine „Dummy“-Funktion mit Code, der bei Instanziierung nicht kompiliert werden kann. Definieren Sie dann spezielle Vorlagenversionen für die gewünschten Rückgabetypen:

template<typename T> T mul(int, int);
template<> int mul<int>(int, int);
template<> std::string mul<std::string>(int, int);
Nach dem Login kopieren

Verwenden Sie sie wie folgt:

int n = mul<int>(6, 3); // n = 18
std::string s = mul<std::string>(54, 3); // s = "666"
Nach dem Login kopieren

Vorlagen für den Rückgabewert (Option 2):

Für Fälle mit unterschiedlichen Parametern können Sie separate Vorlagenspezialisierungen mit unterschiedlichen Parametern definieren Typen:

template<typename T> T mul(int, int);
template<> int mul<int>(int, int);
template<typename T> T mul(char, int);
template<> std::string mul<std::string>(char, int);
Nach dem Login kopieren

Und nennen Sie sie als:

int n = mul<int>(6, 3); // n = 18
std::string s = mul<std::string>('6', 3); // s = "666"
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonKann eine Funktionsüberladung in C basierend auf dem Rückgabewert erreicht werden, und wenn ja, wie?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage