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
Lepaskan: 2024-12-05 11:31:11
asal
663 orang telah melayarinya

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;
};
Salin selepas log masuk

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__>
Salin selepas log masuk

Dengan menggunakan makro ini, anda boleh melaksanakan penaipan ahli sendiri dengan mudah:

class WITH_SELF(Foo)
{
    void test()
    {
        self foo;
    }
};
Salin selepas log masuk

Untuk kelas terbitan, gunakan WITH_SELF_DERIVED:

class WITH_SELF_DERIVED(Bar, Foo)
{
    /* ... */
};
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan