首頁 > 後端開發 > C++ > 主體

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

DDD
發布: 2024-11-01 02:13:02
原創
882 人瀏覽過

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

解決可變參數模板函數中的來源位置問題

在 C 20 中,使用 std::source_location 可以捕獲函數呼叫上下文詳細資訊。然而,由於 source_location 參數的定位,將其與可變參數模板函數一起使用已被證明具有挑戰性。

位置困境

可變參數總是位於末尾參數列表。由於以下原因,這阻礙了std::source_location 的使用:

  • 第一次嘗試:

    <code class="cpp">template <typename... Args>
    void debug(Args&&... args, const std::source_location& loc = std::source_location::current());</code>
    登入後複製

    失敗,因為可變參數必須

  • 第二次嘗試:

    <code class="cpp">template <typename... Args>
    void debug(const std::source_location& loc = std::source_location::current(),
             Args&&... args);</code>
    登入後複製

    插入意外參數時會給呼叫者帶來歧義。

解決方案:擁抱推演指南

初始形式可以透過引入推演指南來煥發活力:

<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");
}</code>
登入後複製

這允許像這樣的呼叫:結論:透過使用推導指南,C 程式設計師可以將std::source_location 無縫地合併到可在變參數模板函數中,以捕獲函數調用上下文資訊毫不費力。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!