Rumah >pembangunan bahagian belakang >C++ >Bagaimana Kita Boleh Melaksanakan Jenis Ahli Autonomi `diri` dalam C?

Bagaimana Kita Boleh Melaksanakan Jenis Ahli Autonomi `diri` dalam C?

Susan Sarandon
Susan Sarandonasal
2024-12-05 11:31:11666semak imbas

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

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn