Maison >développement back-end >C++ >Comment pouvons-nous implémenter un type de membre autonome « ​​self » en C ?

Comment pouvons-nous implémenter un type de membre autonome « ​​self » en C ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-05 11:31:11666parcourir

How Can We Implement an Autonomous `self` Member Type in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn