728x90
반응형
std::unary_function
과std::binary_function
은C++98
표준에서 함수 객체를 만들 때 인자 및 반환 타입 을 명시적으로 제공하기 위해 사용되던 구조체입니다.- 그러나
C++17
표준부터는 이 두 기능이 제거되었습니다. - 이는 더 이상 필요하지 않기 때문이며, 현대
C++
은auto
,decltype
,std::function
, 람다 등을 통해 타입 추론과 함수 객체 작성이 더 직관적이고 강력해졌습니다.
- 불필요한 중복 : 현대
C++
은 타입 추론 기능이 강력해 굳이typedef
제공이 필요 없음 - 표준 라이브러리 리팩토링 :
std::plus
,std::less
등도 해당 기반을 사용하지 않고 구현 - 메타 프로그래밍 개선 :
decltype
과std::invoke
등이 등장하면서 복잡함이 사라짐
-
cpp
#include <iostream> #include <functional> // std::unary_function 사용 예제 // std::unary_function 는 함수 인자 1개만 사용 가능 struct PrintInt : public std::unary_function<int, void> { // 인자 (int), 반환값 void void operator()(int x) const { std::cout << "값: " << x << std::endl; } }; // std::binary_function 사용 예제 // std::binary_function는 함수 인자 2개만 사용 가능 struct Add : public std::binary_function<int, int, int> { // 인자 (int, int), 반환값 void int operator()(int a, int b) const { return a + b; } }; int main() { PrintInt print; print(10); Add add; std::cout << "합: " << add(3, 4) << std::endl; return 0; }
-
cpp
#include <iostream> #include <functional> // std::unary_function, std::binary_function 없이 작성 struct PrintInt { void operator()(int x) const { std::cout << "값: " << x << std::endl; } }; struct Add { int operator()(int a, int b) const { return a + b; } }; int main() { PrintInt print; print(10); Add add; std::cout << "합: " << add(3, 4) << std::endl; // 또는 람다 함수 사용 auto add_lambda = [](int a, int b) { return a + b; }; std::cout << "람다 합: " << add_lambda(5, 7) << std::endl; return 0; }
- 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
728x90
반응형
'C C++' 카테고리의 다른 글
C++20에서 std::iterator가 삭제된 이유 (0) | 2025.03.24 |
---|---|
C++17에서 std::random_shuffle이 삭제된 이유 (0) | 2025.03.24 |
C++17에서 std::mem_fun과 std::mem_fun_ref가 제거된 이유 (0) | 2025.03.23 |
C++17에서 std::ptr_fun이 삭제된 이유 (0) | 2025.03.23 |
C++17에서 std::bind1st와 std::bind2nd가 제거된 이유 (0) | 2025.03.22 |