首頁 >後端開發 >C++ >如何在 C 20 中將 `std::source_location` 與可變參數模板函數一起使用?

如何在 C 20 中將 `std::source_location` 與可變參數模板函數一起使用?

Linda Hamilton
Linda Hamilton原創
2024-10-29 11:47:02187瀏覽

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

克服使用std::source_location 與可變參數模板函數的障礙

可變參數模板函數是C 20 中的一個強大功能,允許處理任意數量的參數。然而,將 std::source_location(一種捕獲呼叫上下文資訊的方法)與這些函數整合是一個挑戰。

與可變參數的衝突

可變參數必須駐留在函數簽章末尾,在合併 std::source_location 時造成障礙。

解決方案1:實現推導指南

可以透過引入來規避此問題轉換呼叫語法的推導指南:

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

在此設定中,函數簽章保持不變,而推導指南彌補了差距:

<code class="cpp">int main()
{
    debug(5, 'A', 3.14f, "foo"); // Call converted to debug<int, char, float, const char*>
}</code>

此解決方案保留了優點std::source_location 並確保可變參數範本函數的無縫語法。

以上是如何在 C 20 中將 `std::source_location` 與可變參數模板函數一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn