Trailing Return Type Using decltype with a Variadic Template Function
Diese Anfrage zielt darauf ab, einen einfachen Addierer zu konstruieren, der die Summe einer beliebigen Anzahl von berechnet Argumente mit dem entsprechenden Rückgabetyp. Die aktuelle Implementierung weist jedoch Einschränkungen bei mehreren Argumenten auf. In diesem Artikel wird das zugrunde liegende Problem untersucht und eine mögliche Problemumgehung untersucht.
Die erste Implementierung nutzt die Syntax des Typs „Trailing Return“, um die Summationsfunktion zu vereinfachen. Bei Argumenten mit mehr als zwei treten jedoch Kompilierungsfehler auf, die darauf hinweisen, dass die Funktion undefiniert ist. Diese Anomalie ist auf die Tatsache zurückzuführen, dass die variadic-Funktionsvorlage deklariert wird, nachdem ihr Rückgabetyp angegeben wurde. Daher kann der decltype()-Ausdruck nicht auf die variadic-Funktionsvorlage selbst verweisen.
Obwohl C 0x rekursive Aufrufe im ->decltype(expr)-Teil zulässt, werden bestimmte Szenarios wie dieses möglicherweise nicht unterstützt . Um dieses Problem zu umgehen, wird eine benutzerdefinierte Merkmalsklasse namens „sum_type“ eingeführt. Es ermöglicht das Ersetzen von decltype durch den Typnamen sum_type
Die anfängliche Implementierung gibt jedoch decltype((a b) c) anstelle des erwarteten zurück decltype(a (b c)). Um dies zu beheben, kann die sum_type-Spezialisierung geändert werden, um die gewünschte Reihenfolge der Operationen sicherzustellen, was zur endgültigen Lösung führt.
Das obige ist der detaillierte Inhalt vonWie erreicht man einen Trailing-Return-Typ mit einer variadischen Vorlagenfunktion für die Summation?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!