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
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 (&input)[size]) : data(input) {} type_t (&data)[size]{}; };
Und ihre Hilfsfunktion:
template <std::size_t S, typename T> test<S, T> helper(T (&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!