std::function은 C++11 표준 라이브러리의 템플릿으로 함수 포인터 개념을 일반화한 것
- 함수 포인터 뿐만 아니라 함수처럼 호출 가능한 객체를 가리킬 수 있음
// 람다 표현식으로 생성된 클로저는 호출 가능한 객체
std::function<bool(const unique_ptr<Widget>&, const unique_ptr<Widget>&)> func;
std::function은 모든 경우에 크기가 동일하게 고정됩니다.
어떤 함수나 람다 함수가 std::function에 저장되더라도, 함수의 Signature(입력 타입과 출력 타입)에 따라서만 객체의 크기가 결정
즉, Signature가 같으면, 어떤 함수가 들어가든 std::function 객체의 크기는 변하지 않음
- 고정된 크기보다 작은 람다 함수는 직접 저장할 수 있지만, 큰 람다 함수는 힙 메모리에 할당하고 해당 메모리에 대한 포인터를 저장
// func1과 func2의 크기는 동일
std::function<int(int)> func1 = [](int x) { return x + 1; }; // 간단한 람다
std::function<int(int)> func2 = [](int x) { return x * x; }; // 조금 더 복잡한 람다
인라인화를 제한하고 간접 함수 호출을 산출하여 느릴 수 있음
'C++' 카테고리의 다른 글
C++ optional (0) | 2024.09.29 |
---|---|
C++ std::bitset (1) | 2024.09.25 |
C++ atomic (0) | 2024.09.18 |
C++ 전위 증감 연산과 후위 증감 연산의 차이 (0) | 2024.09.18 |
C++ 유니폼 초기화(Uniform Initialization), initializer_list (1) | 2024.09.18 |