Namespaces
Variants

std::experimental::ranges:: invoke

From cppreference.net
Определено в заголовочном файле <experimental/ranges/functional>
template < class F, class ... Args >
std:: result_of_t < F && ( Args && ... ) > invoke ( F && f, Args && ... args ) ;
(ranges TS)

Вызовите Callable объект f с параметрами args и верните результат, как если бы выполнялось return INVOKE ( std:: forward < F > ( f ) , std:: forward < Args > ( args ) ... ) ; , где INVOKE(f, t1, t2, ..., tN) определяется следующим образом:

  • Если std:: is_base_of < T, std:: decay_t < decltype ( t1 ) >> :: value равно true , тогда INVOKE ( f, t1, t2, ..., tN ) эквивалентно ( t1. * f ) ( t2, ..., tN ) ,
  • иначе, INVOKE ( f, t1, t2, ..., tN ) эквивалентно ( ( * t1 ) . * f ) ( t2, ..., tN ) .
  • Если std:: is_base_of < T, std:: decay_t < decltype ( t1 ) >> :: value равно true , тогда INVOKE ( f, t1 ) эквивалентно t1. * f ,
  • иначе INVOKE ( f, t1 ) эквивалентно ( * t1 ) . * f .
  • в противном случае, INVOKE ( f, t1, t2, ..., tN ) эквивалентно f ( t1, t2, ..., tN ) (то есть, f является FunctionObject ).

Параметры

f - Callable объект для вызова
args - аргументы для передачи в f

Смотрите также

(C++17) (C++23)
вызывает любой Callable объект с заданными аргументами с возможностью указания возвращаемого типа (начиная с C++23)
(шаблон функции)