可変個引数テンプレート関数で 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 サイトの他の関連記事を参照してください。