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

Warum wurde der teilweise Abzug aus den Klassenvorlagen entfernt?

Susan Sarandon
Freigeben: 2024-11-11 13:55:03
Original
1025 Leute haben es durchsucht

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);
Nach dem Login kopieren

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]{};
};
Nach dem Login kopieren

Und ihre Hilfsfunktion:

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

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
Nach dem Login kopieren

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.
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage