クラス テンプレートの推論
クラス テンプレートのテンプレート引数の推論は、関数テンプレートとクラス テンプレート間の動作を合理化することを目的としています。しかし、この提案には当初、引数のサブセットのみが明示的に指定される部分的控除が含まれていました。
部分的控除に関する懸念
Botond Ballo によって提起された懸念は、潜在的な可能性を浮き彫りにしています。部分的な演繹が曖昧な解釈につながる可能性がある場合の混乱に備えて。例:
tuple<int> t(42, "waldo", 2.0f);
このシナリオでは、部分的な推論が許可されている場合、期待される推論は tuple
現在の動作
これらの懸念のため、クラス テンプレートの部分的な控除は提案から削除されました。現在、推論はすべてのテンプレート引数に適用するか、まったく適用しないことのみ可能です。
例
次のクラス テンプレートを考えてみましょう。
template <std::size_t S, typename T> struct test { test(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; }
指定されたコード:
int buffer[5]; auto a = helper<5, int>(buffer); // No deduction auto b = helper<5>(buffer); // Type deduced auto c = helper(buffer); // Type and size deduced
タイプのみを推定しようとしたときのエラーが示すように、完全な推定のみが許可されます:
auto b = helper<5>(buffer); // Type deduced: FAILS.
以上が部分控除がクラス テンプレートから削除されたのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。