"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment implémenter des surcharges de fonctions membres conditionnelles à l’aide de activate_if en C++ ?

Comment implémenter des surcharges de fonctions membres conditionnelles à l’aide de activate_if en C++ ?

Publié le 2024-11-08
Parcourir:712

How to Implement Conditional Member Function Overloads Using enable_if in C  ?

Sélection d'une fonction membre avec différentes conditions d'activation_if

En C , activate_if est un outil utilisé pour activer ou désactiver conditionnellement certains codes selon que un argument de modèle répond à des critères spécifiques. Cela peut être utile lorsque vous souhaitez personnaliser le comportement d'une classe ou d'une fonction en fonction de ses paramètres de modèle.

Dans l'exemple donné, l'objectif est de créer une fonction membre MyFunction qui se comporte différemment selon que le modèle le paramètre T est un entier ou non. L'implémentation prévue consiste à utiliser deux surcharges de MyFunction, une pour T = int et une pour T != int.

Une approche pour y parvenir consiste à utiliser activate_if, comme indiqué dans le code ci-dessous :

template
struct Point {
  void MyFunction(
    typename std::enable_if<:is_same int>::value, T >::type* = 0) {
    std::cout ::value, float >::type* = 0) {
    std::cout 

Cependant, ce code entraînera des erreurs de compilation en raison d'une utilisation incorrecte de activate_if. En C , la substitution des arguments du modèle a lieu lors de la résolution de la surcharge. Dans ce cas, aucune substitution ne se produit car le type de T est connu au moment de l'instanciation de la fonction membre.

Pour résoudre ce problème, un paramètre de modèle factice peut être introduit et défini par défaut sur T, permettant SFINAE (L'échec de la substitution n'est pas une erreur) pour fonctionner correctement :

template
struct Point {
  template
  typename std::enable_if<:is_same int>::value>::type MyFunction() {
    std::cout 
  typename std::enable_if<:is_same float>::value>::type MyFunction() {
    std::cout 

Cette approche garantit que la version correcte de MyFunction est sélectionnée en fonction de la valeur de T.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3