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
Susan SarandonOriginal
2024-12-05 11:31:11653Durchsuche

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;
};

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__>

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

class WITH_SELF(Foo)
{
    void test()
    {
        self foo;
    }
};

Für abgeleitete Klassen verwenden Sie WITH_SELF_DERIVED:

class WITH_SELF_DERIVED(Bar, Foo)
{
    /* ... */
};

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!

Stellungnahme:
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