Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menggunakan `std::source_location` dengan Fungsi Templat Variadik?

Bagaimana untuk Menggunakan `std::source_location` dengan Fungsi Templat Variadik?

Barbara Streisand
Barbara Streisandasal
2024-10-31 14:59:02698semak imbas

How to Use `std::source_location` with Variadic Template Functions?

Menggunakan std::source_location dengan Variadic Template Functions

Masalah:

C 20 feature std::source_location menyediakan maklumat konteks semasa panggilan fungsi. Walau bagaimanapun, penyepaduannya dengan fungsi templat variadic menimbulkan cabaran kerana kedudukan tetap argumen variadic.

Percubaan Gagal:

  • Menempatkan source_location sebagai parameter pertama mengganggu dengan argumen variadic.
  • Memasukkan lokasi_sumber antara argumen variadic mengganggu jangkaan pemanggil.

Penyelesaian menggunakan Panduan Potongan:

Untuk menyelesaikan isu ini , panduan potongan boleh digunakan:

<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>

Dengan menyatakan panduan potongan, pengkompil boleh membuat kesimpulan jenis yang betul untuk fungsi templat variadic.

Ujian:

<code class="cpp">int main() {
    debug(5, 'A', 3.14f, "foo");
}</code>

Kod ini berjaya menyusun dan mencetak argumen yang disediakan bersama-sama dengan lokasi sumbernya.

DEMO: [pautan disediakan dalam soalan asal]

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan `std::source_location` dengan Fungsi Templat Variadik?. 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