Heim > Backend-Entwicklung > C++ > Wie können wir einen autonomen „Selbst'-Mitgliedstyp in C implementieren?

Wie können wir einen autonomen „Selbst'-Mitgliedstyp in C implementieren?

Susan Sarandon
Freigeben: 2024-12-05 11:31:11
Original
694 Leute haben es durchsucht

How Can We Implement an Autonomous `self` Member Type in C  ?

Implementieren eines autonomen Self-Member-Typs in C

PHP unterstützt das Schlüsselwort self innerhalb einer Klasse, das anhand des Typs der Klasse ausgewertet wird. In C fehlt jedoch ein Äquivalent.

Um dieses Verhalten pro Klasse zu simulieren, kann man eine einfache Typdefinition verwenden:

struct Foo
{
   typedef Foo self;
};
Nach dem Login kopieren

Dies funktioniert zwar, erfordert jedoch die explizite Angabe des Klassennamens, aufsteigend das Risiko stiller Fehler.

Um eine autonome Eingabe von Selbstmitgliedern zu erreichen, können wir decltype und nutzen Freunde:

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__>
Nach dem Login kopieren

Durch die Verwendung dieser Makros können Sie mühelos die Selbstelementtypisierung implementieren:

class WITH_SELF(Foo)
{
    void test()
    {
        self foo;
    }
};
Nach dem Login kopieren

Für abgeleitete Klassen verwenden Sie WITH_SELF_DERIVED:

class WITH_SELF_DERIVED(Bar, Foo)
{
    /* ... */
};
Nach dem Login kopieren

Dies Der Ansatz macht nicht nur die explizite Angabe von Klassennamen überflüssig, sondern unterstützt auch die Mehrfachvererbung.

Das obige ist der detaillierte Inhalt vonWie können wir einen autonomen „Selbst'-Mitgliedstyp in C implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage