Maison >développement back-end >C++ >La surcharge de fonctions en C peut-elle être obtenue en fonction de la valeur de retour, et si oui, comment ?

La surcharge de fonctions en C peut-elle être obtenue en fonction de la valeur de retour, et si oui, comment ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-28 21:59:12838parcourir

Can Function Overloading in C   Be Achieved Based on Return Value, and if so, How?

Rechargement de fonctions par valeur de retour

Introduction

La surcharge de fonctions en C implique généralement de différencier les fonctions en fonction de leurs types de paramètres . Cependant, il est également possible de surcharger les fonctions en fonction de leurs valeurs de retour. Cela vous permet de définir des fonctions qui renvoient différents types de données en fonction de la façon dont elles sont utilisées.

Énoncé du problème

Considérez la tâche suivante :

int n = mul(6, 3); // n = 18
std::string s = mul(6, 3); // s = "666"

Ici, vous devez définir une fonction nommée mul qui renvoie soit un entier, soit une chaîne, selon la valeur de retour de sa valeur. utilisé.

Approches de solution

Saisie explicite :

Une approche consiste à différencier explicitement les appels en tapant. Par exemple, vous pouvez définir deux fonctions distinctes :

int mul(int, int);
std::string mul(char, int);

Et les appeler comme suit :

int n = mul(6, 3); // n = 18
std::string s = mul('6', 3); // s = "666"

Pointeur factice :

Un autre La méthode consiste à ajouter un paramètre factice à chaque fonction, obligeant le compilateur à choisir le bon. Par exemple :

int mul(int *, int, int);
std::string mul(std::string *, char, int);

Et utilisez-les avec :

int n = mul((int *) NULL, 6, 3); // n = 18
std::string s = mul((std::string *) NULL, 54, 3); // s = "666"

Modèle de la valeur de retour (option 1) :

Vous pouvez créer une fonction "factice" avec du code qui ne sera pas compilé s'il est instancié. Ensuite, définissez des versions de modèles spécialisées pour les types de retour souhaités :

template<typename T> T mul(int, int);
template<> int mul<int>(int, int);
template<> std::string mul<std::string>(int, int);

Utilisez-les comme suit :

int n = mul<int>(6, 3); // n = 18
std::string s = mul<std::string>(54, 3); // s = "666"

Modèle de la valeur de retour (option 2) :

Pour les cas avec des paramètres différents, vous pouvez définir des spécialisations de modèles distinctes avec des types de paramètres distincts :

template<typename T> T mul(int, int);
template<> int mul<int>(int, int);
template<typename T> T mul(char, int);
template<> std::string mul<std::string>(char, int);

Et appelez-les comme :

int n = mul<int>(6, 3); // n = 18
std::string s = mul<std::string>('6', 3); // s = "666"

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