Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::function

      From cppreference.com
      <cpp‎ |utility‎ |functional
       
       
      Utilities library
       
      Function objects
      Function invocation
      (C++17)(C++23)
      Identity function object
      (C++20)
      Old binders and adaptors
      (until C++17*)
      (until C++17*)
      (until C++17*)
      (until C++17*)  
      (until C++17*)
      (until C++17*)(until C++17*)(until C++17*)(until C++17*)
      (until C++20*)
      (until C++20*)
      (until C++17*)(until C++17*)
      (until C++17*)(until C++17*)

      (until C++17*)
      (until C++17*)(until C++17*)(until C++17*)(until C++17*)
      (until C++20*)
      (until C++20*)
       
       
      Defined in header<functional>
      template<class>
      class function;/* undefined */
      (since C++11)
      template<class R,class...Args>
      class function<R(Args...)>;
      (since C++11)

      Class templatestd::function is a general-purpose polymorphic function wrapper. Instances ofstd::function can store, copy, and invoke anyCopyConstructibleCallabletarget -- functions (via pointers thereto),lambda expressions,bind expressions, or other function objects, as well as pointers to member functions and pointers to data members.

      The stored callable object is called thetarget ofstd::function. If astd::function contains no target, it is calledempty. Invoking thetarget of anemptystd::function results instd::bad_function_call exception being thrown.

      std::function satisfies the requirements ofCopyConstructible andCopyAssignable.

      Contents

      [edit]Member types

      Type Definition
      result_typeR
      argument_type
      (deprecated in C++17)(removed in C++20)
      T ifsizeof...(Args)==1 andT is the first and only type inArgs...
      first_argument_type
      (deprecated in C++17)(removed in C++20)
      T1 ifsizeof...(Args)==2 andT1 is the first of the two types inArgs...
      second_argument_type
      (deprecated in C++17)(removed in C++20)
      T2 ifsizeof...(Args)==2 andT2 is the second of the two types inArgs...

      [edit]Member functions

      constructs a newstd::function instance
      (public member function)[edit]
      destroys astd::function instance
      (public member function)[edit]
      assigns a new target
      (public member function)[edit]
      swaps the contents
      (public member function)[edit]
      (removed in C++17)
      assigns a new target
      (public member function)[edit]
      checks if a target is contained
      (public member function)[edit]
      invokes the target
      (public member function)[edit]
      Target access
      obtains thetypeid of the stored target
      (public member function)[edit]
      obtains a pointer to the stored target
      (public member function)[edit]

      [edit]Non-member functions

      specializes thestd::swap algorithm
      (function template)[edit]
      (removed in C++20)
      compares astd::function withnullptr
      (function template)[edit]

      [edit]Helper classes

      specializes thestd::uses_allocator type trait
      (class template specialization)[edit]

      [edit]Deduction guides(since C++17)

      [edit]Notes

      Care should be taken when astd::function, whose result type is a reference, is initialized from a lambda expression without a trailing-return-type. Due to the way auto deduction works, such lambda expression will always return a prvalue. Hence, the resulting reference will usually bind to a temporary whose lifetime ends whenstd::function::operator() returns.

      (until C++23)

      If astd::function returning a reference is initialized from a function or function object returning a prvalue (including a lambda expression without a trailing-return-type), the program is ill-formed because binding the returned reference to a temporary object is forbidden.

      (since C++23)
      std::function<constint&()> F([]{return42;});// Error since C++23: can't bind// the returned reference to a temporaryint x= F();// Undefined behavior until C++23: the result of F() is a dangling reference std::function<int&()> G([]()->int&{staticint i{0x2A};return i;});// OK std::function<constint&()> H([i{052}]->constint&{return i;});// OK

      [edit]Example

      Run this code
      #include <functional>#include <iostream> struct Foo{    Foo(int num): num_(num){}void print_add(int i)const{std::cout<< num_+ i<<'\n';}int num_;}; void print_num(int i){std::cout<< i<<'\n';} struct PrintNum{void operator()(int i)const{std::cout<< i<<'\n';}}; int main(){// store a free function    std::function<void(int)> f_display= print_num;    f_display(-9); // store a lambda    std::function<void()> f_display_42=[](){ print_num(42);};    f_display_42(); // store the result of a call to std::bind    std::function<void()> f_display_31337=std::bind(print_num,31337);    f_display_31337(); // store a call to a member function    std::function<void(const Foo&,int)> f_add_display=&Foo::print_add;const Foo foo(314159);    f_add_display(foo,1);    f_add_display(314159,1); // store a call to a data member accessor    std::function<int(Fooconst&)> f_num=&Foo::num_;std::cout<<"num_: "<< f_num(foo)<<'\n'; // store a call to a member function and objectusing std::placeholders::_1;    std::function<void(int)> f_add_display2=std::bind(&Foo::print_add, foo, _1);    f_add_display2(2); // store a call to a member function and object ptr    std::function<void(int)> f_add_display3=std::bind(&Foo::print_add,&foo, _1);    f_add_display3(3); // store a call to a function object    std::function<void(int)> f_display_obj= PrintNum();    f_display_obj(18); auto factorial=[](int n){// store a lambda object to emulate "recursive lambda"; aware of extra overhead        std::function<int(int)> fac=[&](int n){return(n<2)?1: n* fac(n-1);};// note that "auto fac = [&](int n) {...};" does not work in recursive callsreturn fac(n);};for(int i{5}; i!=8;++i)std::cout<< i<<"! = "<< factorial(i)<<";  ";std::cout<<'\n';}

      Possible output:

      -94231337314160314160num_: 314159314161314162185! = 120;  6! = 720;  7! = 5040;

      [edit]See also

      move-only wrapper of any callable object that supports qualifiers in a given call signature
      (class template)[edit]
      copyable wrapper of any copy constructible callable object that supports qualifiers in a given call signature
      (class template)[edit]
      non-owning wrapper of any callable object
      (class template)[edit]
      the exception thrown when invoking an emptystd::function
      (class)[edit]
      (C++11)
      creates a function object out of a pointer to a member
      (function template)[edit]
      typeid queries information of a type, returning astd::type_info object representing the type
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/utility/functional/function&oldid=178280"

      [8]ページ先頭

      ©2009-2025 Movatter.jp