Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ist die teilweise Ableitung von Klassenvorlagenargumenten immer noch nicht praktikabel?

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

DDD
DDDOriginal
2024-11-09 02:12:011003Durchsuche

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]{};
};

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; }

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

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);

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!

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