Page 31 -
P. 31

2.2.2 std::function

                               10
                    std::function 은 임의의 콜러블을 변수에 저장할 수 있으며, 일종의 다형 함수 래퍼(polymorphic
                    function wrapper)라고 볼 수 있다. 이때 콜러블은 람다 함수일 수도 있고, 함수 오브젝트나 함수일                    2
                    수도 있다. 콜러블의 타입을 구체적으로 지정해야 한다면 std::function을 반드시 써야 하고 auto

                    로 교체할 수 없다.                                                                       유틸리티

                     std::function을 이용한 디스패치 테이블
                      // dispatchTable.cpp
                      ...
                      #include <functional>
                      ...
                      int main(){
                      ...
                        // 디스패치 테이블
                        std::map< const char , std::function<double(double, double)> > dispTable;
                        dispTable.insert( std::make_pair('+', [](double a, double b){ return a + b;}));
                        dispTable.insert( std::make_pair('-', [](double a, double b){ return a - b;}));
                        dispTable.insert( std::make_pair('*', [](double a, double b){ return a * b;}));
                        dispTable.insert( std::make_pair('/', [](double a, double b){ return a / b;}));

                        // 연산을 수행한다
                        std::cout << "3.5 + 4.5= " << dispTable['+'](3.5, 4.5) << std::endl;
                        std::cout << "3.5 - 4.5= " << dispTable['-'](3.5, 4.5) << std::endl;
                        std::cout << "3.5 * 4.5= " << dispTable['*'](3.5, 4.5) << std::endl;
                        std::cout << "3.5 / 4.5= " << dispTable['/'](3.5, 4.5) << std::endl;

                        // 새로운 연산자를 추가한다
                        dispTable.insert( std::make_pair('^', [](double a, double b){ return std::pow(a, b);
                      }));
                        std::cout << "3.5 ^ 4.5= " << dispTable['^'](3.5, 4.5) << std::endl;
                      ...


                    std::function의 타입 매개변수는 std::function이 받을 콜러블 타입을 지정한다.









                    10  http://en.cppreference.com/w/cpp/utility/functional/function

                                                                                                  47





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