Maison >développement back-end >C++ >Comment pouvons-nous implémenter un mot-clé autonome « Self » en C ?
Self en C : L'implémentation autonome
Le mot-clé self, largement utilisé dans des langages comme PHP, pose un défi en C en raison de la absence de mécanisme équivalent. Bien qu'une implémentation spécifique à une classe utilisant des typedefs imbriqués soit simple, elle nécessite une duplication et risque d'introduire des bogues subtils. Cet article explore une solution élégante utilisant decltype et des modèles pour parvenir à une implémentation autonome autonome.
Déclaration de soi avec decltype
La tentative initiale d'introduction de soi à l'aide de decltype échoue car elle tente d'y accéder en dehors d'une instance. Pour résoudre ce problème, nous devons encapsuler l'auto-déclaration dans un modèle :
template <typename X, typename...Ts> class SelfBase<X,Ts...>: public Ts... { protected: typedef X self; };
Ce modèle sert de classe de base pour les types pouvant accéder à soi.
Macros pratiques
Pour simplifier l'utilisation de SelfBase, deux macros sont introduit :
Exemples
En utilisant ces macros, nous pouvons maintenant définir des classes avec self :
class WITH_SELF(Foo) { void test() { self foo; // self is now available } }; // Multiple inheritance class WITH_SELF_DERIVED(Bar,Foo,Foo2) { /* ... */ };
Conclusion
En tirant parti de cltype et des templates, il est possible de mettre en place un système autonome type de membre autonome en C . Cette approche permet l'utilisation de soi au sein des classes sans risque de bugs silencieux dus à une redéfinition défectueuse des classes. Les macros pratiques fournies rendent la mise en œuvre simple et flexible, permettant l'héritage de plusieurs classes de base et différentes combinaisons de classes de base autonomes et régulières.
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!