Melaksanakan Jenis Ahli Kendiri Autonomi dalam C
PHP menyokong kata kunci kendiri dalam kelas, yang menilai mengikut jenis kelas. C , bagaimanapun, tidak mempunyai persamaan.
Untuk mensimulasikan gelagat ini setiap kelas, seseorang boleh menggunakan typedef mudah:
struct Foo { typedef Foo self; };
Walaupun ini berfungsi, ia memerlukan penetapan nama kelas secara eksplisit, meningkatkan risiko kesilapan senyap.
Untuk mencapai penaipan ahli diri autonomi, kita boleh memanfaatkan decltype dan rakan-rakan:
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__>
Dengan menggunakan makro ini, anda boleh melaksanakan penaipan ahli sendiri dengan mudah:
class WITH_SELF(Foo) { void test() { self foo; } };
Untuk kelas terbitan, gunakan WITH_SELF_DERIVED:
class WITH_SELF_DERIVED(Bar, Foo) { /* ... */ };
Ini pendekatan bukan sahaja menghapuskan keperluan untuk menyatakan secara eksplisit nama kelas tetapi juga menyokong berbilang warisan.
Atas ialah kandungan terperinci Bagaimana Kita Boleh Melaksanakan Jenis Ahli Autonomi `diri` dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!