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!