Surcharge de fonctions basées sur la valeur de retour en C
La surcharge de fonctions basées sur des paramètres est une pratique courante en C . Cependant, une surcharge basée sur la valeur de retour est également possible, permettant de créer des fonctions qui se comportent différemment selon la manière dont la valeur de retour est utilisée.
Il existe plusieurs méthodes pour y parvenir :
Saisie explicite des appels
Utilisez différents types pour les littéraux transmis à la fonction. Par exemple, pour une fonction renvoyant un entier ou une chaîne selon l'utilisation :
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
Approche du pointeur factice
Ajoutez un paramètre de pointeur factice à chaque fonction, en forçant le compilateur doit choisir la version correcte en fonction du type de valeur de retour :
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
Spécialisation du modèle pour le retour Valeur
Créez des fonctions de modèle et spécialisez-les pour des types de retour spécifiques :
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
Cette méthode nécessite de spécifier explicitement le type de retour lors de l'appel de la fonction pour éviter les ambiguïtés.
Spécialisation des modèles avec plusieurs paramètres
Pour surcharger en fonction de différents paramètres pour la même valeur de retour tapez, créez des modèles distincts pour chaque combinaison de paramètres :
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"
En utilisant ces techniques, vous pouvez efficacement surcharger les fonctions en fonction de leur valeur de retour, permettant ainsi un code plus polyvalent et flexible.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!