Maison >développement back-end >C++ >Comment CRTP peut-il obtenir des types de retour à changement statique à l'aide de typedefs à partir de classes dérivées ?
Types de retour à changement statique dans CRTP avec typesdefs à partir de classes dérivées
Le concept de modèle de modèle curieusement récurrent (CRTP) en C permet un modèle statique polymorphisme, permettant la mise en œuvre d'un comportement de classe dérivé au sein de la classe de base. Cependant, il peut y avoir des situations où l'on souhaite modifier les types de retour des fonctions dans la classe de base en fonction du type dérivé.
Malheureusement, cette modification n'est pas immédiatement possible dans l'exemple de code donné en raison du caractère incomplet de la classe dérivée lorsqu'elle est utilisée comme paramètre de modèle pour la classe de base. Pour résoudre ce problème, le code utilise une solution de contournement courante : créer un modèle de classe de traits.
Utiliser des classes de traits
Un modèle de classe de traits, tel que le modèle base_traits présenté dans le code révisé fait office de pont entre les classes de base et dérivées. Il définit les membres nécessaires, y compris les typedefs et les appels de fonction, auxquels la classe de base doit accéder à partir de la classe dérivée.
Spécialisation des classes de traits
Le code révisé spécialise base_traits pour dérivé pour fournir l’implémentation spécifique des fonctions value_type et call_foo requise par la base. Cette spécialisation garantit que la base a accès aux types de retour et au comportement de fonction corrects de la classe dérivée.
Détails d'implémentation
La classe dérivée contient désormais une fonction dérivée_foo qui renvoie une valeur de type value_type. La fonction base_foo dans base appelle la fonction call_foo à partir du base_traits spécialisé pour invoquer dérivé_foo et récupérer la valeur de retour appropriée.
En utilisant un modèle de classe de traits et en le spécialisant pour les types dérivés souhaités, il devient possible de modifier dynamiquement renvoie les types dans CRTP en fonction des classes dérivées.
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!