Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::apply

      From cppreference.com
      <cpp‎ |utility
       
       
      Utilities library
       
      Defined in header<tuple>
      template<class F,class Tuple>
      constexpr decltype(auto) apply( F&& f, Tuple&& t);
      (since C++17)
      (until C++23)
      template<class F, tuple-like Tuple>
      constexpr decltype(auto) apply( F&& f, Tuple&& t)noexcept(/* see below */);
      (since C++23)

      Invoke theCallable objectf with the elements oft as arguments.

      Given the exposition-only functionapply-impl defined as follows:

      template<class F,class Tuple,std::size_t...I>
      constexpr decltype(auto)
          apply-impl(F&& f, Tuple&& t,std::index_sequence<I...>)// exposition only
      {
          return INVOKE(std::forward<F>(f), std::get<I>(std::forward<Tuple>(t))...);
      }

      The effect is equivalent to:

      return apply-impl(std::forward<F>(f),std::forward<Tuple>(t),
                        std::make_index_sequence<
                            std::tuple_size_v<std::decay_t<Tuple>>>{});
      .

      Contents

      [edit]Parameters

      f -Callable object to be invoked
      t - tuple whose elements to be used as arguments tof

      [edit]Return value

      The value returned byf.

      [edit]Exceptions

      (none)

      (until C++23)
      noexcept specification:  
      noexcept(

         noexcept(std::invoke(std::forward<F>(f),
                               std::get<Is>(std::forward<Tuple>(t))...))

      )

      whereIs... denotes thepack:

      (since C++23)

      [edit]Notes

      Tuple need not bestd::tuple, and instead may be anything that supportsstd::get andstd::tuple_size; in particular,std::array andstd::pair may be used.

      (until C++23)

      Tuple is constrained to be tuple-like, i.e. each type therein is required to be a specialization ofstd::tuple or another type (such asstd::array andstd::pair) that modelstuple-like.

      (since C++23)
      Feature-test macroValueStdFeature
      __cpp_lib_apply201603L(C++17)std::apply

      [edit]Example

      Run this code
      #include <iostream>#include <tuple>#include <utility> int add(int first,int second){return first+ second;} template<typename T>T add_generic(T first, T second){return first+ second;} auto add_lambda=[](auto first,auto second){return first+ second;}; template<typename...Ts>std::ostream& operator<<(std::ostream& os,std::tuple<Ts...>const& theTuple){    std::apply([&os](Tsconst&...tupleArgs){            os<<'[';std::size_t n{0};((os<< tupleArgs<<(++n!= sizeof...(Ts)?", ":"")), ...);            os<<']';}, theTuple);return os;} int main(){// OKstd::cout<< std::apply(add,std::pair(1,2))<<'\n'; // Error: can't deduce the function type// std::cout << std::apply(add_generic, std::make_pair(2.0f, 3.0f)) << '\n'; // OKstd::cout<< std::apply(add_lambda,std::pair(2.0f,3.0f))<<'\n';  // advanced examplestd::tuple myTuple{25,"Hello",9.31f,'c'};std::cout<< myTuple<<'\n';}

      Output:

      35[25, Hello, 9.31, c]

      [edit]See also

      (C++11)
      creates atuple object of the type defined by the argument types
      (function template)[edit]
      creates atuple offorwarding references
      (function template)[edit]
      construct an object with a tuple of arguments
      (function template)[edit]
      (C++17)(C++23)
      invokes anyCallable object with given argumentsand possibility to specify return type(since C++23)
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/apply&oldid=178488"

      [8]ページ先頭

      ©2009-2025 Movatter.jp