Maison >développement back-end >C++ >Les fonctions C peuvent-elles être surchargées en fonction de leur type de retour ?

Les fonctions C peuvent-elles être surchargées en fonction de leur type de retour ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-29 20:06:13179parcourir

Can C   Functions Be Overloaded Based on Their Return Type?

Surcharge de fonctions par type de retour en C

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.

Différenciation explicite par conversion

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

Différenciation des pointeurs factices

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

Différenciation des valeurs de retour basées sur un modèle

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)) ; }

Différenciation des modèles avec différents paramètres

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn