Heim >Backend-Entwicklung >C++ >Warum wurde der teilweise Abzug aus den Klassenvorlagen entfernt?

Warum wurde der teilweise Abzug aus den Klassenvorlagen entfernt?

Susan Sarandon
Susan SarandonOriginal
2024-11-11 13:55:031023Durchsuche

Why Was Partial Deduction Removed from Class Templates?

Abzug für Klassenvorlagen

Der Abzug von Vorlagenargumenten für Klassenvorlagen zielt darauf ab, das Verhalten zwischen Funktionsvorlagen und Klassenvorlagen zu optimieren. Allerdings beinhaltete der Vorschlag zunächst einen teilweisen Abzug, wobei nur eine Teilmenge der Argumente explizit spezifiziert werden sollte.

Bedenken bezüglich des teilweisen Abzugs

Die von Botond Ballo geäußerten Bedenken verdeutlichen das Potenzial Für Verwirrung in Fällen, in denen ein teilweiser Abzug zu mehrdeutigen Interpretationen führen kann. Zum Beispiel:

tuple<int> t(42, "waldo", 2.0f);

Wenn in diesem Szenario ein teilweiser Abzug zulässig wäre, wäre der erwartete Abzug tuple. Tuple ist ebenfalls ein gültiger Typ, was zu Mehrdeutigkeiten führt.

Aktuelles Verhalten

Aufgrund dieser Bedenken wurde der teilweise Abzug für Klassenvorlagen aus dem Vorschlag entfernt. Derzeit kann der Abzug nur auf alle oder keine Vorlagenargumente angewendet werden.

Beispiel

Betrachten Sie die folgende Klassenvorlage:

template <std::size_t S, typename T>
struct test
{
    test(T (&amp;input)[size]) : data(input) {}
    type_t (&amp;data)[size]{};
};

Und ihre Hilfsfunktion:

template <std::size_t S, typename T>
test<S, T> helper(T (&amp;input)[S]) { return input; }

Im gegebenen Code:

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

Es ist nur ein vollständiger Abzug zulässig, wie der Fehler beim Versuch zeigt, nur den Typ abzuleiten:

auto b = helper<5>(buffer);      // Type deduced: FAILS.

Das obige ist der detaillierte Inhalt vonWarum wurde der teilweise Abzug aus den Klassenvorlagen entfernt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn