Rumah > pembangunan bahagian belakang > C++ > Bolehkah Corak Perlindungan Akses Berorientasikan Kunci Dijadikan Lebih Boleh Digunakan Semula?

Bolehkah Corak Perlindungan Akses Berorientasikan Kunci Dijadikan Lebih Boleh Digunakan Semula?

Patricia Arquette
Lepaskan: 2024-11-27 08:43:09
asal
781 orang telah melayarinya

Can Key-Oriented Access Protection Patterns Be Made More Reusable?

Bolehkah Kami Meningkatkan Kebolehgunaan Semula Corak Perlindungan Akses Berorientasikan Kunci?

Dalam bentuk semasa, corak perlindungan akses yang menggunakan kunci mempamerkan batasan dalam kebolehgunaannya semula. Untuk menangani isu ini, pelbagai penambahbaikan telah dicadangkan.

C 03 Penambahbaikan:

Menggunakan makro, kita boleh memudahkan dan membuat generalisasi corak. Makro PASSKEY mentakrifkan kunci laluan untuk kelas atau fungsi tertentu, menyediakan lokasi terpusat untuk mengurus kawalan akses. Berikut ialah contoh:

#define PASSKEY_1(pKeyname, pFriend1)                             \
        class EXPAND(pKeyname)                                    \
        {                                                         \
        private:                                                  \
            friend EXPAND(pFriend1);                              \
            EXPAND(pKeyname)() {}                                 \
                                                                  \
            EXPAND(pKeyname)(const EXPAND(pKeyname)&);            \
            EXPAND(pKeyname)& operator=(const EXPAND(pKeyname)&); \
        }
Salin selepas log masuk

Walaupun kaedah ini meningkatkan kemudahan penggunaan corak, kaedah ini mempunyai kelemahan. Ia memerlukan pemanggil mengetahui kunci laluan khusus yang diperlukan dan boleh membawa kepada kekacauan makro.

Penambahan C 0x:

Dalam C 0x, corak boleh mencapai potensi terbesarnya terima kasih kepada templat variadic dan rakan parameter templat. Berikut ialah pelaksanaan:

template <typename T>
class passkey
{
private:
    friend T; // Now possible in C++0x
    passkey() {}

    // Noncopyable
    passkey(const passkey&amp;) = delete;
    passkey&amp; operator=(const passkey&amp;) = delete;
};

#define PASSKEY_FUNCTION(pTag, pFunc, ...)               \
        struct EXPAND(pTag);                             \
                                                         \
        template <>                                      \
        class passkey<EXPAND(pTag)>                      \
        {                                                \
        private:                                         \
            friend pFunc __VA_ARGS__;                    \
            passkey() {}                                 \
                                                         \
            passkey(const passkey&amp;) = delete;            \
            passkey&amp; operator=(const passkey&amp;) = delete; \
        }
Salin selepas log masuk

Kini, setiap kelas mempunyai kunci laluannya yang unik dan fungsi boleh menentukan kunci laluan yang dibenarkan. Pemanggil hanya mencipta kunci laluan yang diperlukan dan menggunakan kaedah yang diingini. Pendekatan ini menawarkan peningkatan kebolehgunaan dan fleksibiliti melalui pelaksanaan generiknya.

Atas ialah kandungan terperinci Bolehkah Corak Perlindungan Akses Berorientasikan Kunci Dijadikan Lebih Boleh Digunakan Semula?. 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