Funktionen basierend auf dem Rückgabewert in C überladen
Funktionen basierend auf Parametern zu überladen ist in C eine gängige Praxis. Allerdings ist auch eine Überladung basierend auf dem Rückgabewert möglich, sodass Sie Funktionen erstellen können, die sich je nach Verwendung des Rückgabewerts unterschiedlich verhalten.
Es gibt mehrere Methoden, um dies zu erreichen:
Explizite Typisierung von Aufrufen
Verwenden Sie unterschiedliche Typen für die an die Funktion übergebenen Literale. Zum Beispiel für eine Funktion, die je nach Verwendung eine Ganzzahl oder eine Zeichenfolge zurückgibt:
int mul(int, int); std::string mul(char, int); int n = mul(6, 3); // Function called with int return value std::string s = mul('6', 3); // Function called with string return value
Dummy-Pointer-Ansatz
Fügen Sie zu jeder Funktion einen Dummy-Pointer-Parameter hinzu, um zu erzwingen Der Compiler wählt die richtige Version basierend auf dem Rückgabewerttyp aus:
int mul(int*, int, int); std::string mul(std::string*, char, int); int n = mul((int*)NULL, 6, 3); // Function called with int return value std::string s = mul((std::string*)NULL, '6', 3); // Function called with string return value
Template Specialization for Return Wert
Erstellen Sie Vorlagenfunktionen und spezialisieren Sie sie auf bestimmte Rückgabetypen:
template<typename T> T mul(int, int) { // Generic function with a dummy member variable that will cause a compilation error // if not specialized const int k = 25; k = 36; } template<> int mul<int>(int, int) { return i * j; } template<> std::string mul<std::string>(int, int) { return std::string(j, static_cast<char>(i)); } int n = mul<int>(6, 3); // Function called with int return value std::string s = mul<std::string>('6', 3); // Function called with string return value
Diese Methode erfordert die explizite Angabe des Rückgabetyps beim Aufruf der Funktion, um Mehrdeutigkeiten zu vermeiden.
Vorlagenspezialisierung mit mehreren Parametern
Zur Überladung basierend auf verschiedenen Parametern für denselben Rückgabewert Typ, erstellen Sie separate Vorlagen für jede Parameterkombination:
template<typename T> T mul(int, int) { // Generic function with a dummy member variable that will cause a compilation error // if not specialized const int k = 25; k = 36; } template<> int mul<int>(int, int) { return i * j; } template<typename T> T mul(char, int) { // Generic function with a dummy member variable that will cause a compilation error // if not specialized const int k = 25; k = 36; } template<> std::string mul<std::string>(char, int) { return std::string(j, static_cast<char>(i)); } int n = mul<int>(6, 3); // n = 18 std::string s = mul<std::string>('6', 3); // s = "666"
Mit diesen Techniken können Sie Funktionen basierend auf ihrem Rückgabewert effektiv überladen, was vielseitigeren und flexibleren Code ermöglicht.
Das obige ist der detaillierte Inhalt vonKönnen C-Funktionen aufgrund ihres Rückgabewerts überladen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!