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

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

Barbara Streisand
Barbara Streisand原創
2024-10-31 14:59:02697瀏覽

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

將std::source_location 與可變參數模板函數結合使用

問題:

C 20 功能std :source_location 提供函數呼叫期間的上下文資訊。然而,由於可變參數的位置固定,它與可變參數模板函數的整合帶來了挑戰。

失敗的嘗試:

  • 將 source_location 作為第一個參數會產生幹擾帶有可變參數。
  • 在可變參數之間插入 source_location 會破壞呼叫者的期望。

使用演繹指南的解決方案:

解決此問題,可以使用推導指南:

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

此程式碼成功編譯並列印提供的參數及其來源位置。

DEMO: [原始問題中提供的連結]

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

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