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

DDD
Lepaskan: 2024-11-01 02:13:02
asal
882 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!

sumber:php.cn
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!