Heim >Backend-Entwicklung >C++ >Wie können wir einen autonomen „Selbst'-Mitgliedstyp in C implementieren?
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!