Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah token elipsis (...) berfungsi dalam templat variadik C 11?

Bagaimanakah token elipsis (...) berfungsi dalam templat variadik C 11?

Barbara Streisand
Barbara Streisandasal
2024-10-30 01:03:28782semak imbas

How does the ellipsis (...) token work in C  11 variadic templates?

Templat Variadik dan Token Elipsis ("...")

Dalam C 11, templat variadik membenarkan bilangan templat yang fleksibel parameter. Apabila mentakrifkan templat variadik, token elipsis (...) memainkan peranan yang penting.

Membongkar lwn. Pembungkusan

Kedudukan elipsis menentukan fungsinya:

  • Membongkar (Sebelah Kanan): Apabila digunakan di sebelah kanan ungkapan, ... membongkar pek parameter templat. Corak yang tidak dibungkus, dipisahkan dengan koma, menggantikan elipsis dalam panggilan fungsi sebenar.
  • Pembungkusan (Sebelah Kiri): Apabila diletakkan di sebelah kiri, ... membungkus hujah ke dalam pek parameter templat. Argumen yang dibungkus tersedia dalam fungsi sebagai satu entiti.

Contoh Membongkar

Pertimbangkan fungsi templat variadik berikut:

<code class="cpp">template< class T, class... Args >
unique_ptr<T> make_unique( Args&amp;&amp;... args )
{
    return unique_ptr<T>(new T(std::forward<Args>(args)...));
}</code>

Apabila menggunakan make_unique dengan berbilang argumen, elipsis (dalam std::forward(Args>(args)...) membenarkan fungsi menerima bilangan argumen yang berubah-ubah. Elipsis membongkar pek parameter Args, menghasilkan berikut ungkapan diperluaskan:

<code class="cpp">std::forward<Arg0>(arg0), std::forward<Arg1>(arg1), ...</code>

Penempatan Ellipsis dalam Templat dan Argumen Fungsi

Dalam senarai hujah templat, elipsis diletakkan di tengah untuk menunjukkan bahawa parameter pek diteruskan dalam senarai parameter fungsi Ini kerana mungkin terdapat parameter templat tambahan (cth., parameter bukan variadik) mengikut pek parameter variadik.

Dalam pelaksanaan fungsi, elipsis diletakkan pada penghujung. daripada ungkapan untuk menandakan penghujung hujah yang tidak dibungkus Ia memastikan bahawa sebarang hujah yang tinggal dihantar tanpa dibungkus ke dalam satu entiti.

Aplikasi Tambahan

Elipsis. juga boleh digunakan dalam konteks lain, seperti:

  • Mencipta tatasusunan dengan pemula variadic
  • Mentakrifkan kelas yang mewarisi daripada berbilang kelas asas (melalui Mixins awam... sintaks)

Atas ialah kandungan terperinci Bagaimanakah token elipsis (...) berfungsi dalam templat variadik C 11?. 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