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

如何在可變參數模板函數中使用'std::source_location”?

Mary-Kate Olsen
發布: 2024-10-30 19:08:45
原創
976 人瀏覽過

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

在可變參數模板函數中使用std::source_location

利用C 20 功能std::source_location 捕獲可變參數模板中的上下文資訊時函數中,在確定將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>
    登入後複製

這會讓呼叫者感到困惑,在傳遞常規參數(例如debug(42);)時會出錯。

解決方案:推演指南

可以透過在第一種形式中加入推演指南來解決這個問題:

<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>
登入後複製

這個推演指南來解決這個問題:

這個推演指南指南根據模板參數進行推斷在函數參數上,允許將source_location 參數放置在末尾。

<code class="cpp">int main()
{
    debug(5, 'A', 3.14f, "foo");
}</code>
登入後複製
測驗與示範

現場示範:https://godbolt.org /z/n9Wpo9Wrj

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

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