Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Anda Boleh Menggunakan `std::source_location` dengan Fungsi Templat Variadik dalam C 20?

Bagaimanakah Anda Boleh Menggunakan `std::source_location` dengan Fungsi Templat Variadik dalam C 20?

Linda Hamilton
Linda Hamiltonasal
2024-10-29 11:47:02188semak imbas

How Can You Use `std::source_location` with Variadic Template Functions in C  20?

Mengatasi Halangan dalam Menggunakan std::source_location dengan Fungsi Templat Variadik

Fungsi templat variadik, ciri yang kuat dalam C 20, membolehkan pengendalian bilangan hujah yang sewenang-wenangnya. Walau bagaimanapun, menyepadukan std::source_location, satu cara untuk menangkap maklumat konteks panggilan, dengan fungsi ini memberikan cabaran.

Perlanggaran dengan Parameter Variadik

Parameter Variadik mesti ada pada akhir tandatangan fungsi, menimbulkan sekatan jalan apabila memasukkan std::source_location.

Penyelesaian 1: Melaksanakan Panduan Potongan

Isu ini boleh dielakkan dengan memperkenalkan panduan potongan yang mengubah sintaks panggilan:

<code class="cpp">template <typename... Ts>
struct debug
{
    debug(Ts&&... ts, const std::source_location& loc = std::source_location::current());
};

template <typename... Ts>
debug(Ts&&...) -> debug<Ts...>;</code>

Dalam persediaan ini, tandatangan fungsi kekal tidak berubah, manakala panduan potongan merapatkan jurang:

<code class="cpp">int main()
{
    debug(5, 'A', 3.14f, "foo"); // Call converted to debug<int, char, float, const char*>
}</code>

Penyelesaian ini mengekalkan faedah daripada std::source_location dan memastikan sintaks yang lancar untuk fungsi templat variadic.

Atas ialah kandungan terperinci Bagaimanakah Anda Boleh Menggunakan `std::source_location` dengan Fungsi Templat Variadik dalam C 20?. 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