Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Menggunakan `std::source_location` dalam Fungsi Templat Variadic?

Bagaimana untuk Menggunakan `std::source_location` dalam Fungsi Templat Variadic?

Mary-Kate Olsen
Lepaskan: 2024-10-30 19:08:45
asal
1134 orang telah melayarinya

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

Menggunakan std::source_location dalam Fungsi Templat Variadik

Apabila memanfaatkan ciri C 20 std::source_location untuk menangkap maklumat konteks dalam templat variadic fungsi, cabaran timbul dalam menentukan di mana hendak meletakkan parameter lokasi_sumber.

Percubaan Gagal

Percubaan yang salah termasuk:

  • Parameter Variadik di Hujung:

    <code class="cpp">template<typename... Args>
    void debug(Args&&... args, const std::source_location& loc = std::source_location::current());</code>
    Salin selepas log masuk

Ini gagal kerana parameter variadic mesti berada di hujung.

  • Sisipan Parameter:

    <code class="cpp">template<typename... Args>
    void debug(const std::source_location& loc = std::source_location::current(),
    Args&&... args);</code>
    Salin selepas log masuk

Ini mengelirukan pemanggil, yang akan ralat apabila menghantar argumen biasa (mis., nyahpepijat(42);).

Penyelesaian: Panduan Potongan

Isu ini boleh diselesaikan dengan menambahkan panduan potongan pada borang pertama:

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

Panduan potongan ini menyimpulkan parameter templat berdasarkan pada argumen fungsi, membenarkan parameter lokasi_sumber diletakkan pada penghujungnya.

Ujian dan Demonstrasi

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

Demo Langsung: https://godbolt.org /z/n9Wpo9Wrj

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan `std::source_location` dalam Fungsi Templat Variadic?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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