可変引数テンプレート関数で `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 を利用して可変個引数テンプレートのコンテキスト情報を取得する場合

失敗した試行

誤った試行には、次のものが含まれます。

  • 最後の可変個引数パラメーター:

    <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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!