deduction guides für std::packaged_task
Von cppreference.com
< cpp | thread | packaged task
| Definiert im Header <future> |
||
| template< class R, class... Args > packaged_task( R(*)(Args...) ) -> packaged_task<R(Args...)>; |
(1) | (seit C++17) |
| template< class F > packaged_task( F ) -> packaged_task</*siehe unten*/>; |
(2) | (seit C++17) |
| template< class F > packaged_task( F ) -> packaged_task</*siehe unten*/>; |
(3) | (seit C++23) |
| template< class F > packaged_task( F ) -> packaged_task</*siehe unten*/>; |
(4) | (seit C++23) |
1) Dieser Deduktionsleitfaden ist für std::packaged_task vorgesehen, um die Deduktion aus Funktionen zu ermöglichen.
2) Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn &F::operator() als unevaluierter Operand gut gebildet ist und decltype(&F::operator()) die Form R(G::*)(A...) hat (optional cv-qualifiziert, optional noexcept, optional lvalue-Referenz-qualifiziert). Der abgeleitete Typ ist std::packaged_task<R(A...)>.
3) Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn &F::operator() als unevaluierter Operand gut gebildet ist und F::operator() ein explizit übergebener Objektparameter ist, dessen Typ die Form R(G, A...) oder R(G, A...) noexcept hat. Der abgeleitete Typ ist std::packaged_task<R(A...)>.
4) Diese Überladung nimmt nur an der Überladungsauflösung teil, wenn &F::operator() als unevaluierter Operand gut gebildet ist und F::operator() eine statische Memberfunktion ist, deren Typ die Form R(A...) oder R(A...) noexcept hat. Der abgeleitete Typ ist std::packaged_task<R(A...)>.
[bearbeiten] Anmerkungen
Diese Deduktionsleitfäden erlauben keine Deduktion aus einer Funktion mit einem Ellipsenparameter, und die ... in den Typen wird immer als Pack-Erweiterung behandelt.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <future> int func(double) { return 0; } int main() { std::packaged_task f{func}; // deduces packaged_task<int(double)> int i = 5; std::packaged_task g = [&](double) { return i; }; // => packaged_task<int(double)> }