상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
수정하기 - C++에서 std::function의 사용법은?
닉네임
비밀번호
제목
내용
[이미지 업로드는 권한이 있는 사람만 가능. 하단 카톡으로 연락]
`std::function`은 C++11에서 도입된 기능으로, 함수 포인터, <a href='https://sangseek.com/sangseeks/람다/ko'>람다</a> 표현식, 바인드된 함수 객체 등 다양한 호출 가능한 객체를 저장하고 사용할 수 있는 타입입니다. `std::function`은 특히 <a href='https://sangseek.com/sangseeks/콜백 함수/ko'>콜백 함수</a>나 이벤트 핸들러를 구현할 때 유용하게 사용됩니다. 이 글에서는 `std::function`의 기본 사용법, 장점, 그리고 몇 가지 예제를 통해 자세히 설명하겠습니다. 기본 사용법 `std::function`은 템플릿 클래스입니다. 사용하려면 먼저 `<functional>` 헤더 파일을 포함해야 합니다. `std::function`의 기본적인 형태는 다음과 같습니다: ```cpp include <functional> std::function<<a href='https://sangseek.com/sangseeks/반환형/ko'>반환형</a>(매개변수 타입들)> 함수이름; ``` 여기서 `반환형`은 함수가 반환하는 값의 타입이며, `매개변수 타입들`은 함수가 받을 매개변수의 타입입니다. 예제 1: 기본적인 사용 아래는 `std::function`을 사용하여 간단한 함수를 저장하고 호출하는 예제입니다. ```cpp include <iostream> include <functional> void hello() { std::cout << "Hello, World!" << std::endl; } int main() { // std::function을 사용하여 void 반환, 인자 없음 std::function<void()> func = hello; // 함수 호출 func(); // 출력: Hello, World! return 0; } ``` 예제 2: 매개변수가 있는 함수 `std::function`은 매개변수가 있는 함수도 저장할 수 있습니다. ```cpp include <iostream> include <functional> int add(int a, int b) { return a + b; } int main() { std::function<int(int, int)> func = add; int result = func(3, 4); // 3과 4를 더함 std::cout << "Result: " << result << std::endl; // 출력: Result: 7 return 0; } ``` 예제 3: 람다 표현식 사용 `std::function`은 람다 표현식과 함께 사용할 수 있습니다. 이는 코드의 가독성을 높이고, 간결하게 작성할 수 있게 해줍니다. ```cpp include <iostream> include <functional> int main() { std::function<int(int, int)> func = [](int a, int b) { return a * b; }; int result = func(5, 6); // 5와 6을 곱함 std::cout << "Result: " << result << std::endl; // 출력: Result: 30 return 0; } ``` 예제 4: 멤버 함수와 함께 사용 `std::function`은 클래스의 멤버 함수도 저장할 수 있습니다. 이 경우, 객체의 인스턴스를 <a href='https://sangseek.com/sangseeks/바인딩/ko'>바인딩</a>해야 합니다. ```cpp include <iostream> include <functional> class Calculator { public: int multiply(int a, int b) { return a * b; } }; int main() { Calculator calc; // std::bind를 사용하여 멤버 함수를 std::function에 바인딩 std::function<int(int, int)> func = std::bind(&Calculator::multiply, &calc, std::placeholders::_1, std::placeholders::_2); int result = func(7, 8); // 7과 8을 곱함 std::cout << "Result: " << result << std::endl; // 출력: Result: 56 return 0; } ``` 장점 1. 유연성 : `std::function`은 다양한 형태의 호출 가능한 객체를 저장할 수 있어 유연한 코드 작성을 가능하게 합니다. 2. 가독성 : 코드의 가독성을 높이고, 복잡한 함수 포인터를 사용하는 것보다 직관적으로 사용할 수 있습니다. 3. 타입 안전성 : `std::function`은 타입 안전성을 제공하여, 잘못된 타입의 함수 호출을 컴파일 타임에 잡아낼 수 있습니다. 단점 1. 성능 : `std::function`은 내부적으로 동적 메모리를 사용할 수 있으며, 이로 인해 성능이 저하될 수 있습니다. 특히, 성능이 중요한 경우에는 함수 포인터를 사용하는 것이 더 나을 수 있습니다. 2. 오버헤드 : `std::function`은 호출 가능한 객체를 저장하기 위해 추가적인 오버헤드가 발생할 수 있습니다. 결론 `std::function`은 C++에서 함수 포인터, 람다, 바인드된 함수 객체 등을 다룰 수 있는 강력한 도구입니다. 이를 통해 코드의 유연성과 가독성을 높일 수 있으며, 다양한 상황에서 유용하게 사용될 수 있습니다. 그러나 성능이 중요한 경우에는 주의가 필요합니다. `std::function`을 적절히 활용하여 더 나은 C++ 코드를 작성해 보세요!
이용안내
커뮤니티 이용안내
×
- 게시한 게시글로 발생하는 문제는 게시자에게 책임이 있습니다.
- 게시글이 타인/타업체의 저작권을 침해할 경우 모든 책임은 게시자에게 있습니다. 게시자가 모든 손해를 부담해야 합니다.
- 상식닷컴 운영자는 게시자와 상의하지 않고 게시글을 수정 또는 삭제할 수 있습니다.
- 상식닷컴 운영자는 깨끗한 커뮤니티 공간을 만드는 것이 1순위입니다.
수정하기
취소하기