Heim > Backend-Entwicklung > C++ > Wie verwende ich „decltype' mit einer Variadic-Vorlagenfunktion, um die Summe ihrer Argumente zu berechnen?

Wie verwende ich „decltype' mit einer Variadic-Vorlagenfunktion, um die Summe ihrer Argumente zu berechnen?

DDD
Freigeben: 2024-11-11 03:22:02
Original
931 Leute haben es durchsucht

How to Use `decltype` with a Variadic Template Function to Calculate the Sum of its Arguments?

Trailing Return Type Using decltype with a Variadic Template Function

Beim Versuch, eine Funktion zu erstellen, die die Summe ihrer Argumente mithilfe einer Variadic akkumuliert Bei der Syntax von Vorlagen und nachgestellten Rückgabetypen treten Herausforderungen auf. Insbesondere kann es beim Compiler zu Fehlern bei Funktionen mit mehr als zwei Argumenten kommen. Dies liegt daran, dass die variadic-Funktionsvorlage erst nach Angabe ihres Rückgabetyps als deklariert gilt, was dazu führt, dass sum in decltype nicht auf die variadic-Funktionsvorlage selbst verweisen kann.

Eine mögliche Problemumgehung besteht darin, eine benutzerdefinierte Traits-Klasse zu verwenden Vermeiden Sie den rekursiven Aufruf innerhalb des decltype-Ausdrucks:

template<class T> typename std::add_rvalue_reference<T>::type val();

template<class T> struct id{typedef T type;};

template<class T, class... P> struct sum_type;
template<class T> struct sum_type<T> : id<T> {};
template<class T, class U, class... P> struct sum_type<T,U,P...>
: sum_type< decltype( val<const T&amp;>() + val<const U&amp;>() ), P... > {};
Nach dem Login kopieren

Dies ermöglicht das Ersetzen von decltype im Originalprogramm durch den Typnamen sum_type::type, wodurch die Kompilierung erfolgreich ist.

Um sicherzustellen, dass die Summierung die Reihenfolge der Operationen berücksichtigt (z. B. a (b c)), kann die endgültige Spezialisierung von sum_type wie folgt geändert werden:

template<class T, class U, class... P> struct sum_type<T,U,P...>
: id<decltype(
      val<T>()
    + val<typename sum_type<U,P...>::type>()
)>{};
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie verwende ich „decltype' mit einer Variadic-Vorlagenfunktion, um die Summe ihrer Argumente zu berechnen?. 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