상식닷컴
로그인
가입하기
2026년 상식닷컴 선정 식당 & 카페 리스트
2025년 2026년 신상 호텔 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요
일주일 식단표 어플
자동 일주일 식단표 어플
안드로이드
아이폰
주식 & 코인 차트의 신
1000만원으로 2000만원 만들기 프로젝트
궁금한 상식 보기
눈물흘림증과 관련된 심리 상담은 어떻게 받을 수 있나요?
눈물흘림증이 있는 경우 어떤 종류의 환경이 도움이 될까요?
노예해방 기념일의 기념식에서 어떤 연사가 초청되나요?
10대들이 좋아하는 영화의 시청 플랫폼은 무엇인가요?
10대들이 좋아하는 영화의 시청 후 감정은 어떤 것이 있나요?
20대의 친구 관계를 그린 영화 추천해 주세요.
20대의 사회적 활동을 그린 코미디 영화는?
SerDes의 신호 무결성을 어떻게 보장하나요?
RTK의 오차 보정 방식은 어떻게 이루어지나요?
RTK와 RTN의 차이점은 무엇인가요?
RTK의 정확성을 높이기 위한 알고리즘은 어떤 것이 있나요?
바하마의 전통적인 스포츠는 무엇인가요?
Previous
Next
수정하기 - 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순위입니다.
수정하기
취소하기