Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mencapai Jenis Pulangan Fleksibel dengan Polimorfisme Statik C (CRTP) dan Mengelakkan Ralat Penyusunan?

Bagaimanakah Saya Boleh Mencapai Jenis Pulangan Fleksibel dengan Polimorfisme Statik C (CRTP) dan Mengelakkan Ralat Penyusunan?

Mary-Kate Olsen
Lepaskan: 2024-12-09 00:04:15
asal
797 orang telah melayarinya

How Can I Achieve Flexible Return Types with C   Static Polymorphism (CRTP) and Avoid Compilation Errors?

C Static Polymorphism (CRTP) Menggunakan Derived Class Typedefs

Corak templat berulang yang ingin tahu (CRTP) membolehkan polimorfisme statik dalam C , tetapi ia menjadi mencabar apabila bertujuan untuk ubah suai jenis pulangan fungsi berdasarkan jenis terbitan. Walaupun CRTP biasanya boleh membuat kesimpulan jenis terbitan, kod berikut menghadapi isu penyusunan dalam MSVC 2010:

template <typename derived_t>
class base {
public:
    typedef typename derived_t::value_type value_type;
};

template <typename T>
class derived : public base<derived<T>> {
public:
    typedef T value_type;
};
Salin selepas log masuk

Ralat ini timbul kerana kelas terbitan tidak lengkap apabila digunakan sebagai parameter templat untuk kelas asas dalam asas senarai kelas. Untuk menangani isu ini, penyelesaian biasa melibatkan penggunaan templat kelas ciri:

// Declare the base_traits class template
template <typename derived_t>
struct base_traits;

// Define the base class
template <typename derived_t>
struct base {
    typedef typename base_traits<derived_t>::value_type value_type;
};

// Define the derived class
template <typename T>
struct derived : public base<derived<T>> {
    typedef typename base_traits<derived<T>>::value_type value_type;
};

// Specialization of base_traits for derived
template <typename T>
struct base_traits<derived<T>> {
    typedef T value_type;
};
Salin selepas log masuk

Dengan mengkhususkan templat base_traits untuk jenis terbitan yang diingini, anda boleh menentukan ahli yang diperlukan, termasuk jenis pulangan tersuai untuk fungsi seperti foo (). Teknik ini membolehkan polimorfisme statik dengan lebih fleksibiliti dalam jenis pemulangan sambil mengelakkan ralat kompilasi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencapai Jenis Pulangan Fleksibel dengan Polimorfisme Statik C (CRTP) dan Mengelakkan Ralat Penyusunan?. 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