Page 30 -
P. 30

// 두 인수에 대한 자리 표시자
                   std::function<double(double, double)> myDivBindPlaceholder= std::bind(divMe, _1, _2);
                   std::cout << "1/2.0= " << myDivBindPlaceholder(1, 2.0) << std::endl;

                   // 두 인수에 대한 자리 표시자, 인수 맞바꾸기
                   std::function<double(double, double)> myDivBindPlaceholderSwap= std::bind(divMe, _2,
                 _1);
                   std::cout << "1/2.0= " << myDivBindPlaceholderSwap(2.0, 1) << std::endl;


                   // 첫 번째 인수에 대한 자리 표시자
                   std::function<double(double)> myDivBind1St= std::bind(divMe, _1, 2.0);
                   std::cout<< "1/2.0= " << myDivBind1St(1) << std::endl;

                   // 두 번째 인수에 대한 자리 표시자
                   std::function<double(double)> myDivBind2Nd= std::bind(divMe, 1.0, _1);
                   std::cout << "1/2.0= " << myDivBind2Nd(2.0) << std::endl;
                 ... 8
                 }




                 Tip     std::bind와 std::function이 필요한 경우는 별로 없다
                   8
                 TR1 의 일부분인 std::bind와 std::function이 필요한 경우는 C++11부터 줄었다. std::bind 대신 람다 함수
                 (lambda function)를, std::function 대신 자동 타입 추론(automatic type deduction)을 활용하면 된다.





               2.2.1 std::bind


                       9
               std::bind 를 이용하면 함수 오브젝트를 다음과 같이 다양한 방식으로 생성할 수 있다.
                 ●   인수를 원하는 위치에 바인딩할 수 있다.

                 ●   인수의 순서를 바꿀 수 있다.
                 ●   인수에 자리 표시자(placeholder)를 적용할 수 있다.

                 ●   함수의 일부분만 평가할 수 있다.
                 ●    새로 생성된 함수 오브젝트를 호출하고, STL 알고리즘에서 활용하거나 std::function에 저
                    장할 수 있다.



               8  https://en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1
               9  http://en.cppreference.com/w/cpp/utility/functional/bind

         46





     c++_06.indd   46                                                                        2021-11-19   오전 9:25:45
   25   26   27   28   29   30   31