Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memastikan Kehomogenan Jenis Hujah dalam Fungsi Variadik?

Bagaimana untuk Memastikan Kehomogenan Jenis Hujah dalam Fungsi Variadik?

Susan Sarandon
Susan Sarandonasal
2024-11-17 09:17:03639semak imbas

How to Ensure Argument Type Homogeneity in Variadic Functions?

Memastikan Kehomogenan Jenis Argumen dalam Fungsi Variadik Tanpa Pengubahsuaian Struktur

Apabila mentakrifkan fungsi dengan argumen variadic, selalunya wajar untuk memastikan semua argumen yang disediakan adalah daripada jenis yang sama . Ini membantu mengekalkan keselamatan jenis dan menghalang kemungkinan ralat.

Fungsi variadik sendiri tidak menguatkuasakan keselamatan jenis, menjadikan pengaturcara bertanggungjawab untuk semakan eksplisit. Walau bagaimanapun, gabungan teknik boleh digunakan untuk melaksanakan keperluan ini dengan berkesan.

Pilihan 1: Pendekatan Tukar-Kemudian

Salah satu kaedah ialah menerima hujah sebagai variadic dan lakukan penukaran jenis kemudian. Sebagai contoh, jika anda mengetahui langkah-langkah yang diperlukan untuk menukar daripada std::array kepada dragon_list_t, fungsi templat berikut boleh digunakan:

template<typename ...Items>
dragon_list_t make_dragon_list(Items... maidens) {
    std::array<Maiden, sizeof...(Items)> arr = {{ maidens ... }};
    // Here be dragons
}

Pilihan 2: Pendekatan Awal-Penolakan Berasaskan SFINAE

Pilihan lain ialah menggunakan Kegagalan Gantian Bukan Ralat (SFINAE) untuk melakukan semakan jenis pada tahap antara muka fungsi. Teknik ini membenarkan penyelesaian beban lampau untuk menolak jenis hujah yang tidak sah lebih awal:

template<typename R, typename... Args>
struct fst { typedef R type; };

template<typename ...Args>
typename fst<void, 
  typename enable_if<
    is_convertible<Args, ToType>::value
  >::type...
>::type 
f(Args...);

Dalam contoh ini, fungsi f akan digunakan hanya apabila semua argumen yang disediakan boleh ditukar kepada jenis ToType.

Kesimpulan

Dengan menggunakan sama ada pendekatan tukar-kemudian atau pendekatan tolak-awal berasaskan SFINAE, pembangun boleh menentukan satu jenis untuk semua hujah yang dihantar kepada fungsi variadic atau fungsi templat variadic tanpa menggunakan kepada struktur tambahan atau overhed.

Atas ialah kandungan terperinci Bagaimana untuk Memastikan Kehomogenan Jenis Hujah dalam Fungsi Variadik?. 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