C 11 : Aliasing de fonction
En C , le mot-clé using peut être utilisé pour créer un alias pour une classe. Cependant, la même fonctionnalité n’est pas directement disponible pour les fonctions. Cet article explore la question de savoir si l'alias de fonction est possible et propose une solution utilisant le transfert parfait.
Objectif :
Déterminer s'il est possible de créer un alias pour une fonction dans C et, si tel est le cas, trouver la méthode la plus propre pour y parvenir.
Énoncé du problème :
Considérez le code suivant :
<code class="cpp">namespace bar { void f(); }</code>
Nous aimerions pour créer un alias nommé g pour la fonction bar::f. Cependant, la tentative suivante entraîne une erreur :
<code class="cpp">using g = bar::f; // error: ‘f’ in namespace ‘bar’ does not name a type</code>
Solution :
Pour créer un alias de fonction, nous pouvons utiliser une combinaison de modèles et de transfert parfait. Voici un exemple de la façon dont cela peut être réalisé :
<code class="cpp">template <typename... Args> auto g(Args&&... args) -> decltype(f(std::forward<Args>(args)...)) { return f(std::forward<Args>(args)...); }</code>
Cette solution fonctionne en créant une fonction de modèle générique qui prend n'importe quel nombre d'arguments. Il transmet ensuite ces arguments à la fonction d'origine f en utilisant une transmission parfaite. Cela garantit que la fonction appelée reçoit les arguments dans leur forme d'origine, quelles que soient les conversions de type ou les déréférences de pointeur qui ont pu être appliquées à l'alias.
Remarque :
Cette solution fonctionne également pour les fonctions surchargées et les modèles de fonctions, garantissant que la fonction correcte est appelée en fonction des arguments fournis.
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!