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

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

DDD
DDD原創
2024-11-01 02:13:02884瀏覽

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中文網其他相關文章!

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