Maison >développement back-end >C++ >Les fonctions C peuvent-elles être surchargées en fonction de leur type de retour ?
Bien que C prenne en charge la surcharge de fonctions en fonction des types de paramètres, il offre également la possibilité intéressante de sélectionner différentes implémentations de fonctions en fonction du retour valeur. Cela peut être une technique précieuse pour gérer les cas où la même entrée peut produire différentes sorties souhaitées.
Dans le cas d'utilisation présenté, nous avons une fonction mul qui devrait renvoyer un entier lorsqu'il est affecté à une variable entière et une chaîne lorsqu'il est affecté à une variable chaîne. Cependant, C nécessite une différenciation explicite pour y parvenir :
std::string s = mul(54, 3); // Proper conversion
Une approche alternative consiste à ajouter des paramètres factices aux signatures de fonction. En passant des pointeurs NULL des types de retour souhaités, nous pouvons forcer le compilateur à sélectionner la fonction appropriée :
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
Les modèles C fournissent une autre méthode pour la valeur de retour surcharge. Nous pouvons créer une fonction « factice » avec du code qui ne sera compilé que s'il est instancié avec des modèles spécifiques :
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)) ; }
Si nécessaire, une surcharge basée sur des modèles peut également prendre en charge différents types de paramètres pour différentes spécialisations de valeurs de retour :
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) {...}
En utilisant ces techniques, les programmeurs peuvent créer des fonctions qui fournissent différentes sorties basées sur sur le type de valeur de retour attendu.
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!