Function objects
함수 객체 는 함수 호출 연산자가 정의된 모든 객체입니다. C++는 많은 내장 함수 객체를 제공하며 새로운 함수 객체의 생성과 조작을 지원합니다.
목차 |
함수 호출
|
설명 전용 연산
타입
|
(C++11 이후) |
std::invoke
및
std::invoke_r
(C++23부터)
는 주어진 인수로
Callable
객체를
INVOKE
및
INVOKE<R>
(C++23부터)
규칙에 따라 호출할 수 있습니다.
|
(C++17)
(C++23)
|
주어진 인수로 임의의
Callable
객체를 호출
및 반환 타입 지정 가능
(since C++23)
(함수 템플릿) |
함수 래퍼
이러한 다형성 래퍼 클래스들은 임의의 함수 객체를 저장하기 위한 지원을 제공합니다.
|
(C++11)
|
복사 생성 가능한 모든 호출 가능 객체의 복사 가능 래퍼
(클래스 템플릿) |
|
(C++23)
|
주어진 호출 시그니처에서 한정자를 지원하는 모든 호출 가능 객체의 이동 전용 래퍼
(클래스 템플릿) |
|
(C++26)
|
주어진 호출 시그니처에서 한정자를 지원하는 복사 생성 가능한 모든 호출 가능 객체의 복사 가능 래퍼
(클래스 템플릿) |
|
(C++26)
|
모든 호출 가능 객체의 비소유 래퍼
(클래스 템플릿) |
|
(C++11)
|
빈
std::function
을 호출할 때 발생하는 예외
(클래스) |
|
(C++11)
|
멤버에 대한 포인터로부터 함수 객체를 생성함
(함수 템플릿) |
Identity
std::identity 는 항등 함수 객체입니다: 인수를 변경 없이 그대로 반환합니다.
|
(C++20)
|
인수를 변경 없이 반환하는 함수 객체
(클래스) |
부분 함수 적용
std::bind_front 와 std::bind 는 부분 함수 적용(partial function application) , 즉 함수에 인수를 바인딩하여 새로운 함수를 생성하는 기능을 지원합니다.
|
(C++20)
(C++23)
|
함수 객체에 가변 개수의 인수를 순서대로 바인딩합니다
(함수 템플릿) |
|
(C++11)
|
함수 객체에 하나 이상의 인수를 바인딩합니다
(함수 템플릿) |
|
(C++11)
|
객체가
std::bind
표현식이거나 그렇게 사용될 수 있음을 나타냅니다
(클래스 템플릿) |
|
(C++11)
|
객체가 표준 플레이스홀더이거나 그렇게 사용될 수 있음을 나타냅니다
(클래스 템플릿) |
std::placeholders
네임스페이스에 정의됨
|
|
|
(C++11)
|
std::bind
표현식에서 바인딩되지 않은 인수에 대한 플레이스홀더
(상수) |
부정자
std::not_fn 전달된 호출 가능 객체의 호출 결과를 부정하는 함수 객체를 생성합니다.
|
(C++17)
|
보유한 함수 객체의 결과의 보수를 반환하는 함수 객체를 생성합니다
(함수 템플릿) |
검색기
여러 문자열 검색 알고리즘을 구현하는 검색기들이 제공되며, 이들은 직접 사용하거나 std::search 와 함께 사용할 수 있습니다.
|
(C++17)
|
표준 C++ 라이브러리 검색 알고리즘 구현
(클래스 템플릿) |
|
(C++17)
|
Boyer-Moore 검색 알고리즘 구현
(클래스 템플릿) |
|
(C++17)
|
Boyer-Moore-Horspool 검색 알고리즘 구현
(클래스 템플릿) |
레퍼런스 래퍼
참조 래퍼는 참조 인수들을 복사 가능한 함수 객체에 저장할 수 있게 합니다:
|
(C++11)
|
CopyConstructible
및
CopyAssignable
참조 래퍼
(클래스 템플릿) |
|
(C++11)
(C++11)
|
인수에서 추론된 타입으로
std::reference_wrapper
생성
(함수 템플릿) |
|
(C++20)
(C++20)
|
std::reference_wrapper
내에 래핑된 참조 타입 획득
(클래스 템플릿) |
투명 함수 객체
연관 컨테이너
와
비순차 연관 컨테이너
(C++20부터)
는 이종 탐색
및 삭제 연산
(C++23부터)
을 제공하지만, 이는 제공된 함수 객체 타입
표준 라이브러리의 모든 투명 함수 객체 타입은 중첩 타입
|
(C++14부터) |
연산자 함수 객체
C++는 다음과 같은 일반적인 산술 및 논리 연산을 나타내는 함수 객체들을 정의합니다.
|
void 특수화는 매개변수 타입과 반환 타입을 인자로부터 추론하며, 이들은 모두 투명(transparent) 입니다. |
(C++14부터) |
산술 연산 |
|
|
x
+
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
+
y
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
x
-
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
-
y
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
x
*
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
*
y
연산을 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
x
/
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
/
y
연산을 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
x
%
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
%
y
연산을 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
-
x
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
-
x
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
비교 연산 |
|
|
x
==
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
==
y
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
x
!
=
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
!
=
y
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
x
>
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
>
y
함수 객체 구현
(클래스 템플릿 특수화) |
|
x
<
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
<
y
연산을 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
x
>=
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
>=
y
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
함수 객체 구현:
x
<=
y
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
<=
y
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
논리 연산 |
|
|
x
&&
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
&&
y
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
x
||
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
||
y
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
!
x
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
!
x
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
비트 연산 |
|
|
x
&
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
&
y
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
x
|
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
x
|
y
를 구현하는 함수 객체
매개변수 및 반환 타입 추론 (클래스 템플릿 특수화) |
|
x
^
y
를 구현하는 함수 객체
(클래스 템플릿) |
|
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
x
^
y
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
|
(C++14)
|
~x
를 구현하는 함수 객체
(클래스 템플릿) |
|
(C++14)
|
매개변수 및 반환 타입을 추론하는
~x
를 구현하는 함수 객체
(클래스 템플릿 특수화) |
제약된 비교 함수 객체다음 비교 함수 객체들은 제약된 함수 객체입니다.
이 모든 함수 객체들은 투명 합니다.
|
(C++20부터) |
도우미 항목다음 설명 전용 항목들은 표준 라이브러리의 여러 구성 요소에 사용되지만 표준 라이브러리의 인터페이스 부분은 아닙니다.
|
(C++26부터) |
구형 바인더 및 어댑터초기 기능 지원을 제공했던 여러 유틸리티들은 더 이상 사용되지 않으며 제거되었습니다:
|
(C++20 이전) | ||||||||||||||||||||||||||||||||||||
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 185 | C++98 | 함수 객체 사용이 프로그램 효율성을 향상시킨다고 명시됨 | 해당 주장 삭제 |
| LWG 660 | C++98 | 비트 연산을 위한 함수 객체가 누락됨 | 추가됨 |
| LWG 2149 | C++98 |
하나 또는 두 개의 인수를 취하는 함수 객체는
인수 및 결과 타입을 나타내는 중첩 타입을 제공해야 했음 |
필수 아님 |
| LWG 2219 | C++11 |
INVOKE
가
std::reference_wrapper
를 올바르게 처리하지 않음
|
올바르게 처리함 |
| LWG 2420 | C++11 |
INVOKE<R>
는
R
이
void
인 경우 반환 값을 버리지 않음
|
이 경우 반환 값을 버림 |
|
LWG 2926
( P0604R0 ) |
C++11 |
반환 타입
R
을 갖는
INVOKE
연산의 구문이
INVOKE
(
f, t1, t2, ..., tN, R
)
였음
|
다음으로 변경됨
INVOKE<R>
(
f, t1, t2, ..., tN
)
|
| LWG 3655 | C++11 |
INVOKE
가
LWG 이슈 2219
의 해결로 인해
union을 올바르게 처리하지 않음 |
올바르게 처리함 |