クラス テンプレートの部分的なテンプレート引数の推定: 再検討
関数とクラス テンプレートの動作を統合するために P0091 で概説されている努力にもかかわらず、クラス テンプレートでの部分的な引数の推定は依然としてわかりにくいです。この説明では、現在の制限を明確にし、その背後にある潜在的な理由を検討します。
クラス テンプレート テストとそのヘルパー関数ヘルパーについて考えてみましょう。提供されたコードで示されているように、ヘルパーでは部分的な推論が可能ですが、対応するクラス テンプレートのテストではそれができません。
template<std::size_t S, typename T> struct test { static constexpr auto size = S; using type_t = T; test(type_t(&&input)[size]) : data(input) {} type_t(&&data)[size]{}; };
template<std::size_t S, typename T> test<S, T> helper(T(&&input)[S]) { return input; }
実験すると、クラス テンプレートの推論は、すべての引数が明示的に指定されている場合にのみ発生することが明らかになります。提供された。予想される動作からの逸脱により、P0091 の解釈に誤解があったのではないかという疑問が生じます。
Botond Ballo の旅行レポートが示唆しているように、クラス テンプレートの部分的な控除が提案されましたが、混乱を招く懸念から後に撤回されました。 。たとえば、次のコードでは、tuple
tuple<int> t(42, "waldo", 2.0f);
このような曖昧さを回避するには、クラス テンプレートにはテンプレート引数の完全なセットを指定する必要がありますが、関数テンプレートの場合は部分的な推論がオプションのままです。
以上がクラス テンプレートのテンプレート引数を部分的に推定できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。