Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Potongan Hujah Templat Kelas Separa Masih Tidak Boleh Dilaksanakan?

Mengapa Potongan Hujah Templat Kelas Separa Masih Tidak Boleh Dilaksanakan?

DDD
DDDasal
2024-11-09 02:12:011026semak imbas

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]{};
};

Apabila menggunakan fungsi pembantu untuk kemudahan penggunaan:

template <std::size_t S, typename T>
test<S, T> helper(T (&amp;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!

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