Während C das Überladen von Funktionen basierend auf Parametertypen unterstützt, bietet es auch die faszinierende Möglichkeit, verschiedene Funktionsimplementierungen basierend auf der Rückgabe auszuwählen Wert. Dies kann eine wertvolle Technik für den Umgang mit Fällen sein, in denen dieselbe Eingabe unterschiedliche gewünschte Ausgaben erzeugen kann.
Im vorgestellten Anwendungsfall haben wir eine Funktion mul, die eine zurückgeben sollte eine Ganzzahl, wenn sie einer Ganzzahlvariablen zugewiesen wird, und eine Zeichenfolge, wenn sie einer Zeichenfolgenvariablen zugewiesen wird. Um dies zu erreichen, erfordert C jedoch eine explizite Differenzierung:
std::string s = mul(54, 3); // Proper conversion
Ein alternativer Ansatz besteht darin, den Funktionssignaturen Dummy-Parameter hinzuzufügen. Indem wir NULL-Zeiger der gewünschten Rückgabetypen übergeben, können wir den Compiler zwingen, die entsprechende Funktion auszuwählen:
int mul(int* dummy, int i, int j) { return i*j; } std::string mul(std::string* dummy, char c, int n) { return std::string(n, c); } int n = mul(NULL, 6, 3); // Return integer std::string s = mul(NULL, 54, 3); // Return string
C-Vorlagen bieten eine weitere Methode für den Rückgabewert Überlastung. Wir können eine „Dummy“-Funktion mit Code erstellen, der nicht kompiliert werden kann, wenn er nicht mit bestimmten Vorlagen instanziiert wird:
template<typename T> T mul(int i, int j) { const int k = 25 ; k = 36 ; } template<> int mul<int>(int i, int j) { return i * j ; } template<> std::string mul<std::string>(int i, int j) { return std::string(j, static_cast<char>(i)) ; }
Bei Bedarf kann auch eine vorlagenbasierte Überladung erfolgen unterstützen verschiedene Parametertypen für unterschiedliche Rückgabewertspezialisierungen:
template<typename T> T mul(int i, int j) {...} template<> int mul<int>(int i, int j) {...} template<> std::string mul<std::string>(char i, int j) {...}
Durch die Verwendung dieser Techniken können Programmierer Funktionen erstellen, die unterschiedliche Ausgaben basierend auf dem bereitstellen erwarteter Rückgabewerttyp.
Das obige ist der detaillierte Inhalt vonKönnen C-Funktionen aufgrund ihres Rückgabetyps überladen werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!