반응형

C++17에서 std::bind1ststd::bind2nd가 제거된 이유


1. 제거된 이유

  • std::bind1ststd::bind2ndC++98에서 함수 객체의 첫 번째 또는 두 번째 인자를 고정 시키는 기능을 제공했습니다.
  • 하지만 몇 가지 문제점이 있었습니다:
    • 제한된 기능 : 첫 번째나 두 번째 인자만 고정할 수 있음
    • 가독성 저하 : 코드가 복잡하고 직관적이지 않음
    • 타입 추론 어려움 : 가끔 의도한 동작이 명확하지 않음
    • 새로운 대체 기능 등장 : C++11 이후 std::bind와 람다(lambda, 익명 함수)가 도입되면서 동일한 기능을 더 간결하고 유연하게 구현할 수 있게 되었음

  • 결국 이러한 이유로 std::bind1ststd::bind2ndC++17 표준에서 제거 되었습니다.


2. C++98 예제 (std::bind2nd 사용)

  • cpp

      #include <iostream>
      #include <functional>
      #include <vector>
      #include <algorithm>
      
      int main() {
          std::vector<int> numbers = {1, 2, 3, 4, 5};
     	 
          // 3보다 큰 값 찾기
          auto it = std::find_if( numbers.begin(), numbers.end(),
             std::bind2nd( std::greater<int>(), 3 )
     	 );
          
          if (it != numbers.end()) {
              std::cout << "찾은 값: " << *it << std::endl;  // 출력: 4
          }
     	 
          return 0;
      }
    


3. C++17 방식 (lambda 사용)

  • cpp

      #include <iostream>
      #include <vector>
      #include <algorithm>
      
      int main() {
          std::vector<int> numbers = {1, 2, 3, 4, 5};
     	 
          // 3보다 큰 값 찾기
          auto it = std::find_if( numbers.begin(), numbers.end(),
              [](int value) { return value > 3; }
          );
          
          if (it != numbers.end()) {
              std::cout << "찾은 값: " << *it << std::endl;  // 출력: 4
          }
     	 
          return 0;
      }
    


4. 요약

  • std::bind1ststd::bind2nd는 제한적인 기능과 가독성 문제로 인해 C++17에서 제거되었으며, 현재는 std::bind나 람다 함수를 사용하는 것이 권장됩니다.

  • 람다는 가독성과 유연성을 모두 충족시키는 현대적인 대안입니다.




  • 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
  • 일부 모바일 환경에서는 ❤️ 버튼이 보이지 않습니다.

728x90
반응형

+ Recent posts