クラス テンプレートのテンプレート引数を部分的に推定できないのはなぜですか?

Barbara Streisand
リリース: 2024-11-08 21:13:02
オリジナル
238 人が閲覧しました

Why Can't We Partially Deduce Template Arguments for Class Templates?

クラス テンプレートの部分的なテンプレート引数の推定: 再検討

関数とクラス テンプレートの動作を統合するために 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 は推論されません。はそれ自体が有効な型です:

tuple<int> t(42, "waldo", 2.0f);
ログイン後にコピー

このような曖昧さを回避するには、クラス テンプレートにはテンプレート引数の完全なセットを指定する必要がありますが、関数テンプレートの場合は部分的な推論がオプションのままです。

以上がクラス テンプレートのテンプレート引数を部分的に推定できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!