Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menggunakan `std::source_location` dalam Fungsi Templat Variadic?
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>
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>
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>
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>
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!