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

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

Linda Hamilton
リリース: 2024-10-29 11:47:02
オリジナル
196 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート