ホームページ > バックエンド開発 > C++ > 部分控除がクラス テンプレートから削除されたのはなぜですか?

部分控除がクラス テンプレートから削除されたのはなぜですか?

Susan Sarandon
リリース: 2024-11-11 13:55:03
オリジナル
1062 人が閲覧しました

Why Was Partial Deduction Removed from Class Templates?

クラス テンプレートの推論

クラス テンプレートのテンプレート引数の推論は、関数テンプレートとクラス テンプレート間の動作を合理化することを目的としています。しかし、この提案には当初、引数のサブセットのみが明示的に指定される部分的控除が含まれていました。

部分的控除に関する懸念

Botond Ballo によって提起された懸念は、潜在的な可能性を浮き彫りにしています。部分的な演繹が曖昧な解釈につながる可能性がある場合の混乱に備えて。例:

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

このシナリオでは、部分的な推論が許可されている場合、期待される推論は tuple になります。ただし、tuple

現在の動作

これらの懸念のため、クラス テンプレートの部分的な控除は提案から削除されました。現在、推論はすべてのテンプレート引数に適用するか、まったく適用しないことのみ可能です。

次のクラス テンプレートを考えてみましょう。

template <std::size_t S, typename T>
struct test
{
    test(T (&amp;input)[size]) : data(input) {}
    type_t (&amp;data)[size]{};
};
ログイン後にコピー

そしてそのヘルパー関数:

template <std::size_t S, typename T>
test<S, T> helper(T (&amp;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 サイトの他の関連記事を参照してください。

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