Maison >développement back-end >C++ >Comment pouvons-nous implémenter un type de membre autonome « self » en C ?
Implémentation d'un type de membre autonome autonome en C
PHP prend en charge le mot-clé self au sein d'une classe, qui est évalué selon le type de la classe. C , cependant, n'a pas d'équivalent.
Pour simuler ce comportement par classe, on peut utiliser un simple typedef :
struct Foo { typedef Foo self; };
Bien que cela fonctionne, cela nécessite de spécifier explicitement le nom de la classe, en augmentant le risque d'erreurs silencieuses.
Pour parvenir à une saisie autonome des membres, nous pouvons exploiter decltype et amis :
template <typename... Ts> class Self; template <typename X, typename... Ts> class Self<X, Ts...> : public Ts... { protected: typedef X self; }; #define WITH_SELF(X) X: public Self<X> #define WITH_SELF_DERIVED(X, ...) X: public Self<X, __VA_ARGS__>
En utilisant ces macros, vous pouvez facilement implémenter la saisie de membres autonomes :
class WITH_SELF(Foo) { void test() { self foo; } };
Pour les classes dérivées, utilisez WITH_SELF_DERIVED :
class WITH_SELF_DERIVED(Bar, Foo) { /* ... */ };
Ceci Cette approche élimine non seulement le besoin de spécifier explicitement les noms de classe, mais prend également en charge l'héritage multiple.
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!