래퍼 함수bind와function 사용 실례

7188 단어 function
#include <random>
#include <iostream>
#include <functional>
 
void f(int n1, int n2, int n3, const int& n4, int n5)
{
    std::cout << n1 << ' ' << n2 << ' ' << n3 << ' ' << n4 << ' ' << n5 << '
'; } int g(int n1) { return n1; } struct Foo { void print_sum(int n1, int n2) { std::cout << n1+n2 << '
'; } }; int main() { using namespace std::placeholders; // demonstrates argument reordering and pass-by-reference int n = 7; auto f1 = std::bind(f, _2, _1, 42, std::cref(n), n);// :cref , , ref() n = 10; f1(1, 2, 1001); // 1 is bound by _1, 2 is bound by _2, 1001 is unused // nested bind subexpressions share the placeholders auto f2 = std::bind(f, _3, std::bind(g, _3), _3, 4, 5); f2(10, 11, 12); // bind to a member function Foo foo; auto f3 = std::bind(&Foo::print_sum, foo, 95, _1); f3(5); }

실행 결과:
C:\Windows\system32\cmd.exe/c bind.exe2 1 42 10 712 12 12 4 5100Hit any key to close this window...
설명:bind 함수 안의 "_n"은 자리 표시자를 대표하고 실제 함수를 호출하기 전에 여기에 매개 변수가 있음을 나타낸다.하나의 클래스의 구성원 함수를 귀속할 때 클래스 구성원 함수의 은밀한 포인터 "this"를 가리켜야 하기 때문에 마지막 bind 뒤에 "foo"파라미터가 있습니다.
#include <functional>
#include <iostream> struct Foo { Foo(int num) : num_(num) {} void print_add(int i) const { std::cout << num_+i << '
'; } int num_;}; void print_num(int i){ std::cout << i << '
';} 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; Foo foo(314159); f_add_display(foo, 1);}

실행 결과:
C:\Windows\system32\cmd.exe/c function.exe-94231337314160Hit any key to close this window...
설명: function<> 괄호 내부는 함수 반환값과 파라미터를 나타내는 데 사용됩니다.

좋은 웹페이지 즐겨찾기