Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Saya Boleh Menguatkuasakan Kekangan pada Parameter Templat dalam Pra-C 11?

Bagaimanakah Saya Boleh Menguatkuasakan Kekangan pada Parameter Templat dalam Pra-C 11?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-30 18:11:03842semak imbas

How Can I Enforce Constraints on Template Parameters in Pre-C  11?

Menguatkuasakan Kekangan pada Parameter Templat dalam C

Dalam C# dan bahasa pengaturcaraan moden yang lain, adalah perkara biasa untuk menentukan jenis generik dengan kekangan pada yang dibenarkan jenis. Dengan berbuat demikian, anda boleh memastikan bahawa kod anda beroperasi pada objek dengan kelas asas atau pelaksanaan antara muka tertentu.

Menggunakan Kekangan dalam C

Sementara C 11 memperkenalkan templat asli kekangan, terdapat teknik untuk mencapai tingkah laku yang serupa dalam versi pra-C 11. Satu pendekatan ialah menggunakan static_assert dengan std::is_base_of. Ini membolehkan anda melakukan semakan masa kompilasi sama ada parameter templat berasal daripada kelas asas yang diingini.

Contoh

Pertimbangkan coretan kod berikut:

<code class="cpp">#include <type_traits>

template<typename T>
class YourClass {

    YourClass() {
        // Compile-time check
        static_assert(std::is_base_of<BaseClass, T>::value, "type parameter of this class must derive from BaseClass");

        // ...
    }
}</code>

Dalam contoh ini, templat YourClass mempunyai pembina yang melakukan semakan masa kompilasi menggunakan static_assert dan std::is_base_of trait. Ia mengesahkan bahawa parameter templat yang ditentukan T diperoleh daripada kelas asas BaseClass. Jika syarat tidak dipenuhi, kod tidak akan disusun.

Dengan menggunakan teknik ini, anda boleh menguatkuasakan kekangan pada parameter templat anda dalam pra-C 11 C , memastikan kod anda beroperasi pada objek dengan warisan yang diingini hierarki.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menguatkuasakan Kekangan pada Parameter Templat dalam Pra-C 11?. 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