Rumah >pembangunan bahagian belakang >C++ >Bolehkah Metaprogramming Membantu Mentakrifkan Templat Berdasarkan Penukaran Rentetan?

Bolehkah Metaprogramming Membantu Mentakrifkan Templat Berdasarkan Penukaran Rentetan?

Susan Sarandon
Susan Sarandonasal
2024-11-09 14:12:021082semak imbas

Can Metaprogramming Help Define Templates Based on String Conversion?

Metaprogramming: Kriteria Pemilihan Templat Alternatif untuk Definisi Fungsi

Soalan ini meneroka konsep mentakrifkan templat berdasarkan keupayaan jenis untuk ditukar kepada rentetan. Kod asal menggunakan ciri jenis is_arithmetic, tetapi cadangannya ialah menggunakan kriteria yang menilai sama ada to_string ditakrifkan untuk jenis tersebut.

Walau bagaimanapun, bertentangan dengan kriteria ini, menentukan bila to_string tidak ditakrifkan, membuktikan mencabar. Kod berikut gagal:

template<typename T> enable_if_t<decltype(to_string(T{})::value, string> (T t){
    // ...
}

Untuk menangani perkara ini, jawapannya mencadangkan menggunakan ciri jenis void_t Walter Brown, yang membenarkan penciptaan yang berikut:

template<typename T, typename = void>
struct has_to_string
: std::false_type { };

template<typename T>
struct has_to_string<T, 
    void_t<decltype(std::to_string(std::declval<T>()))>
    > 
: std::true_type { };

Sifat jenis ini menilai dengan berkesan sama ada to_string ditakrifkan untuk jenis tertentu, sekali gus menyediakan kriteria pemilihan templat alternatif yang lebih tepat sejajar dengan niat asal.

Atas ialah kandungan terperinci Bolehkah Metaprogramming Membantu Mentakrifkan Templat Berdasarkan Penukaran Rentetan?. 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