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

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

DDD
Lepaskan: 2024-11-01 02:13:02
asal
1039 orang telah melayarinya

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

Menyelesaikan Masalah Lokasi Sumber dalam Fungsi Templat Variadik

Dalam C 20, menangkap butiran konteks panggilan fungsi dimungkinkan dengan std::source_location. Walau bagaimanapun, menggunakannya dengan fungsi templat variadik terbukti mencabar kerana kedudukan parameter lokasi_sumber.

Kesusahan Kedudukan

Selalunya, parameter variadik mendiami hujung senarai parameter. Ini menghalang penggunaan std::source_location disebabkan oleh sebab berikut:

  • Percubaan Pertama:

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

    gagal kerana parameter variadic mesti berada di penghujung.

  • Percubaan Kedua:

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

    memperkenalkan kekaburan untuk pemanggil kerana ia menyelit parameter yang tidak dijangka.

Penyelesaian: Menerima Panduan Potongan

Borang awal boleh dihidupkan semula dengan memperkenalkan panduan potongan:

<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

Ini membenarkan panggilan seperti :

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

Kesimpulan:

Melalui penggunaan panduan potongan, pengaturcara C dengan lancar boleh memasukkan std::source_location ke dalam fungsi templat variadic untuk menangkap maklumat konteks panggilan fungsi dengan mudah.

Atas ialah kandungan terperinci Bagaimana untuk 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 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan