Heim > Backend-Entwicklung > C++ > Hauptteil

Warum ist die teilweise Ableitung von Klassenvorlagenargumenten immer noch nicht praktikabel?

DDD
Freigeben: 2024-11-09 02:12:01
Original
1024 Leute haben es durchsucht

Why is Partial Class Template Argument Deduction Still Unworkable?

Warum der partielle Abzug von Klassenvorlagenargumenten schwer fassbar bleibt

Trotz der Absichten des P0091: Vorlagenargumentabzugs für Klassenvorlagen-Vorschlags, das Verhalten anzupassen von Funktions- und Klassenvorlagen, teilweiser Abzug für Klassenvorlagen bleibt bestehen nicht umsetzbar.

Beachten Sie die Klassenvorlage:

template <std::size_t S, typename T>
struct test
{
    static constexpr auto size = S;
    using type_t = T;

    test(type_t (&amp;input)[size]) : data(input) {}
    type_t (&amp;data)[size]{};
};
Nach dem Login kopieren

Bei Verwendung einer Hilfsfunktion für eine einfachere Verwendung:

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

Code wie:

int buffer[5];

auto a = helper<5, int>(buffer); // No deduction
auto b = helper<5>(buffer);      // Type deduced: FAILS
auto c = helper(buffer);         // Type and size deduced
Nach dem Login kopieren

erfolgreich kompiliert. In neueren Compilerversionen schlägt jedoch der teilweise Abzug (d. h. auto b = helper<5>(buffer);) fehl, was darauf hindeutet, dass der teilweise Abzug von Klassenvorlagenargumenten tatsächlich nicht unterstützt wird.

Diese Einschränkung ist auf Bedenken zurückzuführen angesprochen hinsichtlich möglicher Verwirrung in Fällen wie:

// Deduced as tuple<int, string, float>
// but tuple<int> is also a valid type!
tuple<int> t(42, "waldo", 2.0f);
Nach dem Login kopieren

Während der Vorschlag ursprünglich darauf abzielte, das Abzugsverhalten zu vereinheitlichen, bleibt der teilweise Abzug für Klassenvorlagen bestehen aufgrund möglicher Mehrdeutigkeitsprobleme nicht durchführbar.

Das obige ist der detaillierte Inhalt vonWarum ist die teilweise Ableitung von Klassenvorlagenargumenten immer noch nicht praktikabel?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage