ホームページ >バックエンド開発 >C++ >C 20 で可変引数テンプレート関数で `std::source_location` を使用するにはどうすればよいですか?

C 20 で可変引数テンプレート関数で `std::source_location` を使用するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-29 11:47:02198ブラウズ

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

可変個引数テンプレート関数で std::source_location を使用する際の障害を克服する

C 20 の強力な機能である可変個引数テンプレート関数により、任意の数の引数の処理。ただし、呼び出しコンテキスト情報を取得する手段である std::source_location をこれらの関数と統合するには、課題が生じます。

可変個引数パラメーターとの衝突

可変個引数パラメーターが存在する必要があります関数シグネチャの最後にあるため、std::source_location を組み込むときに障害が発生します。

解決策 1: 演繹ガイドの実装

この問題は、次のように導入することで回避できます。呼び出し構文を変換する演繹ガイド:

<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"); // Call converted to debug<int, char, float, const char*>
}</code>

このソリューションは利点を保持しますstd::source_location を変更し、可変個引数テンプレート関数のシームレスな構文を保証します。

以上がC 20 で可変引数テンプレート関数で `std::source_location` を使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。