Mengapa Potongan Hujah Templat Kelas Separa Masih Tidak Boleh Dilaksanakan?

DDD
Lepaskan: 2024-11-09 02:12:01
asal
1025 orang telah melayarinya

Why is Partial Class Template Argument Deduction Still Unworkable?

Mengapa Potongan Argumen Templat Kelas Separa Kekal Sukar difahami

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 (&amp;input)[size]) : data(input) {}
    type_t (&amp;data)[size]{};
};
Salin selepas log masuk

Apabila menggunakan fungsi pembantu untuk kemudahan penggunaan:

template <std::size_t S, typename T>
test<S, T> helper(T (&amp;input)[S]) { return input; }
Salin selepas log masuk

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
Salin selepas log masuk

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);
Salin selepas log masuk

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!

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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan