Walaupun niat P0091: Potongan hujah templat untuk templat kelas cadangan untuk menyelaraskan tingkah laku fungsi dan templat kelas, potongan separa untuk templat kelas kekal tidak boleh dilaksanakan.
Pertimbangkan templat kelas:
template <std::size_t S, typename T> struct test { static constexpr auto size = S; using type_t = T; test(type_t (&input)[size]) : data(input) {} type_t (&data)[size]{}; };
Apabila menggunakan fungsi pembantu untuk kemudahan penggunaan:
template <std::size_t S, typename T> test<S, T> helper(T (&input)[S]) { return input; }
Kod seperti:
int buffer[5]; auto a = helper<5, int>(buffer); // No deduction auto b = helper<5>(buffer); // Type deduced: FAILS auto c = helper(buffer); // Type and size deduced
berjaya menyusun. Walau bagaimanapun, dalam versi pengkompil yang lebih terkini, potongan separa (iaitu, auto b = helper<5>(buffer);) gagal, menunjukkan bahawa potongan hujah templat kelas separa sememangnya tidak disokong.
Had ini berpunca daripada kebimbangan dibangkitkan mengenai kemungkinan kekeliruan dalam kes seperti:
// Deduced as tuple<int, string, float> // but tuple<int> is also a valid type! tuple<int> t(42, "waldo", 2.0f);
Oleh itu, sementara cadangan itu pada mulanya bertujuan untuk menyatukan gelagat potongan, potongan separa untuk templat kelas kekal tidak dapat dilaksanakan kerana kemungkinan isu kekaburan.
Atas ialah kandungan terperinci Mengapa Potongan Hujah Templat Kelas Separa Masih Tidak Boleh Dilaksanakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!