다음을 통해 공유


<functional>

함수 개체(functors라고도 함) 및 해당 바인더를 생성하는 데 도움이 되는 C++ 표준 라이브러리 함수를 정의합니다. 함수 개체는 operator()를 정의하는 형식의 개체입니다. 함수 개체는 함수 포인터일 수 있지만, 개체를 사용하여 함수 호출 중에 액세스할 수 있는 추가 정보를 저장하는 것이 더 일반적입니다.

요구 사항

헤더:<기능>

네임스페이스: std

설명

알고리즘에는 단항 및 이진 함수 개체의 두 가지 형식이 필요합니다. 단항 함수 개체에는 인수가 하나 필요하고 이항 함수 개체에는 인수가 두 개 필요합니다. 함수 개체 및 함수 포인터는 알고리즘 조건자로 전달할 수 있지만 함수 개체는 조정 가능하며 C++ 표준 라이브러리의 범위, 유연성 및 효율성을 높입니다. 예를 들어 값이 알고리즘에 전달되기 전에 함수에 바인딩되어야 하는 경우 함수 포인터를 사용할 수 없습니다. 함수 어댑터는 함수 포인터를 값에 바인딩될 수 있는 조정 가능한 함수 개체로 변환합니다. 헤더 <함수> 에는 멤버 함수를 적응 가능한 함수 개체로 호출할 수 있는 멤버 함수 어댑터도 포함되어 있습니다. 함수는 해당 인수 및 반환 형식을 지정하는 중첩 형식 선언을 포함하는 경우 조정 가능합니다. 함수 개체와 해당 어댑터는 C++ 표준 라이브러리가 기존 애플리케이션을 업그레이드할 수 있도록 하며 라이브러리를 C++ 프로그래밍 환경으로 통합하는 데 도움이 됩니다.

함수>에서 함수 개체의 구현에는 표준 함수 개체<의 특수화이며 템플릿 매개 변수를 사용하지 않고 함수 인수의 완벽한 전달과 결과의 완벽한 반환을 수행하는 투명한 연산자 functor가 포함됩니다. 이러한 템플릿 특수화는 산술, 비교, 논리 및 비트 연산자 함수를 호출할 때 인수 형식을 지정할 필요가 없습니다. 사용자 고유의 형식 또는 다른 유형의 형식 조합에 대해 산술, 비교, 논리 또는 비트 연산자를 오버로드할 수 있으며 투명 연산자 함수를 함수 인수로 사용할 수 있습니다. 예를 들어 MyType 형식이 operator<를 구현하는 경우 sort(my_collection.begin(), my_collection.end(), less<MyType>()) 형식을 명시적으로 지정하는 대신 sort(my_collection.begin(), my_collection.end(), less<>())를 호출할 수 있습니다.

다음 기능은 C++11, C++14 및 C++17에 추가됩니다.

  • 호출 시그니처는 반환 형식의 이름 및 0개 이상 인수 형식의 괄호로 묶인 쉼표로 구분된 목록입니다.

  • 호출 가능 형식은 함수에 대한 포인터, 멤버 함수에 대한 포인터, 멤버 데이터에 대한 포인터 또는 개체가 함수 호출 연산자 바로 왼쪽에 표시될 수 있는 클래스 형식입니다.

  • 호출 가능 개체는 호출 가능 형식의 개체입니다.

  • 호출 래퍼 형식은 호출 가능 개체를 보유하고 해당 개체에 전달하는 호출 작업을 지원하는 형식입니다.

  • 호출 래퍼는 호출 래퍼 형식의 개체입니다.

  • 대상 개체는 호출 래퍼 개체가 보유한 호출 가능 개체입니다.

의사(pseudo) 함수 INVOKE(f, t1, t2, ..., tN)은 다음 중 하나를 의미합니다.

  • fT 클래스의 멤버 함수에 대한 포인터이고, t1T 형식의 개체이거나 T 형식의 개체에 대한 참조 또는 T에서 파생된 형식의 개체에 대한 참조인 경우 (t1.*f)(t2, ..., tN)입니다.

  • fT 클래스의 멤버 함수에 대한 포인터이고 t1이 이전 항목에서 설명한 형식 중 하나가 아닌 경우 ((*t1).*f)(t2, ..., tN)입니다.

  • N == 1이며 fT 클래스의 멤버 데이터에 대한 포인터이고, t1T 형식의 개체이거나 T 형식의 개체에 대한 참조 또는 T에서 파생된 형식의 개체에 대한 참조인 경우 t1.*f입니다.

  • N == 1이며 fT 클래스의 멤버 데이터에 대한 포인터이고 t1이 이전 항목에서 설명한 형식 중 하나가 아닌 경우 (*t1).*f입니다.

  • 다른 모든 경우에서는 f(t1, t2, ..., tN)입니다.

의사(pseudo) 함수 INVOKE(f, t1, t2, ..., tN, R)INVOKE(f, t1, t2, ..., tN)R로 암시적으로 변환되었음을 의미합니다.

호출 래퍼에 약한 결과 형식이 있는 경우 해당 멤버 형식 result_type의 형식은 다음과 같이 래퍼 대상 개체의 T 형식을 기반으로 합니다.

  • T가 함수에 대한 포인터인 경우 result_typeT의 반환 형식에 대한 동의어입니다.

  • T가 멤버 함수에 대한 포인터인 경우 result_typeT의 반환 형식에 대한 동의어입니다.

  • T가 멤버 형식 result_type을 포함하는 클래스 형식인 경우 result_typeT::result_type에 대한 동의어입니다.

  • 그렇지 않은 경우 멤버 result_type이 없습니다.

각 호출 래퍼에 이동 생성자 및 복사 생성자가 있습니다. 단순 호출 래퍼는 대입 연산자가 있고 해당 복사 생성자, 이동 생성자 및 대입 연산자에서 예외가 발생하지 않는 호출 래퍼입니다. 전달 호출 래퍼는 임의의 인수 목록을 사용하여 호출할 수 있고 래핑된 호출 가능 개체에 인수를 참조로 전달하는 호출 래퍼입니다. 모든 rvalue 인수는 rvalue 참조로 전달되고 lvalue 인수는 lvalue 참조로 전달됩니다.

멤버

클래스

이름 설명
bad_function_call 개체가 비어 있어서 function 개체에 대한 operator() 호출이 실패했음을 나타내기 위해 발생한 예외를 설명하는 클래스입니다.
binary_negate 지정된 이진 함수의 반환 값을 부정하는 멤버 함수를 제공하는 클래스 템플릿입니다.
(C++17에서는 사용되지 않습니다.)
binder1st 이진 함수의 첫 번째 인수를 지정된 값에 바인딩하여 이진 함수 개체를 단항 함수 개체로 변환하는 생성자를 제공하는 클래스 템플릿입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
binder2nd 이진 함수의 두 번째 인수를 지정된 값에 바인딩하여 이진 함수 개체를 단항 함수 개체로 변환하는 생성자를 제공하는 클래스 템플릿입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
boyer_moore_horspool_searcher
boyer_moore_searcher
const_mem_fun_ref_t 참조 인수를 사용하여 초기화할 때 인수를 사용하지 않는 const 멤버 함수를 단항 함수 개체로 호출할 수 있도록 하는 어댑터 클래스입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
const_mem_fun_t 포인터 인수를 사용하여 초기화할 때 인수를 사용하지 않는 const 멤버 함수를 단항 함수 개체로 호출할 수 있도록 하는 어댑터 클래스입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
const_mem_fun1_ref_t 참조 인수를 사용하여 초기화할 때 단일 인수를 사용하는 const 멤버 함수를 이항 함수 개체로 호출할 수 있도록 하는 어댑터 클래스입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
const_mem_fun1_t 포인터 인수를 사용하여 초기화할 때 단일 인수를 사용하는 const 멤버 함수를 이항 함수 개체로 호출할 수 있도록 하는 어댑터 클래스입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
default_searcher
function 호출 가능 개체를 래핑하는 클래스입니다.
hash 값에 대한 해시 코드를 계산하는 클래스입니다.
is_bind_expression bind를 호출하여 특정 형식이 생성되었는지 테스트하는 클래스입니다.
is_placeholder 특정 형식이 자리 표시자인지 테스트하는 클래스입니다.
mem_fun_ref_t 참조 인수를 사용하여 non_const 초기화할 때 인수를 사용하지 않는 멤버 함수를 단항 함수 개체로 호출할 수 있도록 하는 어댑터 클래스입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
mem_fun_t 포인터 인수를 사용하여 non_const 초기화할 때 인수를 사용하지 않는 멤버 함수를 단항 함수 개체로 호출할 수 있도록 하는 어댑터 클래스입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
mem_fun1_ref_t 참조 인수를 사용하여 non_const 초기화할 때 단일 인수를 사용하는 멤버 함수를 이진 함수 개체로 호출할 수 있도록 하는 어댑터 클래스입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
mem_fun1_t 포인터 인수를 사용하여 non_const 초기화할 때 단일 인수를 사용하는 멤버 함수를 이진 함수 개체로 호출할 수 있도록 하는 어댑터 클래스입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
pointer_to_binary_function 이항 함수 포인터를 조정 가능한 이항 함수로 변환합니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
pointer_to_unary_function 단항 함수 포인터를 조정 가능한 단항 함수로 변환합니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
reference_wrapper 참조를 래핑하는 클래스입니다.
unary_negate 지정된 단항 함수의 반환 값을 부정하는 멤버 함수를 제공하는 클래스 템플릿입니다.
(C++17에서는 사용되지 않습니다.)

함수

속성 설명
bind 호출 가능 개체에 인수를 바인딩합니다.
bind1st 이항 함수의 첫 번째 인수를 지정된 값에 바인딩하여 이항 함수 개체를 단항 함수 개체로 변환하는 어댑터를 만드는 도우미 템플릿 함수입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
bind2nd 이항 함수의 두 번째 인수를 지정된 값에 바인딩하여 이항 함수 개체를 단항 함수 개체로 변환하는 어댑터를 만드는 도우미 템플릿 함수입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
bit_and 두 매개 변수의 비트 AND(이진 operator&)를 반환합니다.
bit_not 매개 변수의 비트 보수(operator~)를 반환합니다.
(C++14에 추가됨)
bit_or 두 매개 변수의 비트 OR(operator|)을 반환합니다.
bit_xor 두 매개 변수의 비트 XOR(operator^)를 반환합니다.
cref 인수에서 const reference_wrapper를 생성합니다.
invoke
mem_fn 단순 호출 래퍼를 생성합니다.
mem_fun 포인터 인수를 사용하여 초기화할 때 멤버 함수에 대한 함수 개체 어댑터를 생성하는 데 사용되는 도우미 템플릿 함수입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
mem_fun_ref 참조 인수를 사용하여 초기화할 때 멤버 함수에 대한 함수 개체 어댑터를 생성하는 데 사용되는 도우미 템플릿 함수입니다.
not1 단항 조건자의 보수를 반환합니다.
(C++17에서는 사용되지 않습니다.)
not2 이항 조건자의 보수를 반환합니다.
(C++17에서는 사용되지 않습니다.)
not_fn 함수 개체의 결과의 보수를 반환합니다.
(C++17에 추가됨)
ptr_fun 단항 및 이항 함수 포인터를 각각 조정 가능한 단항 및 이항 함수로 변환하는 데 사용되는 도우미 템플릿 함수입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
ref 인수에서 reference_wrapper 를 생성합니다.
swap function 개체를 교환합니다.

구조체

속성 설명
binary_function 이항 함수 개체를 제공하는 파생 클래스에 상속될 수 있는 형식을 정의하는 빈 기본 클래스입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)
divides 클래스는 지정된 값 형식의 요소에 대해 나누기 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다.
equal_to 지정된 형식의 값이 해당 형식의 다른 값과 같은지 테스트하는 이항 조건자입니다.
greater 지정된 형식의 값이 해당 형식의 다른 값보다 큰지 테스트하는 이항 조건자입니다.
greater_equal 지정된 형식의 값이 해당 형식의 다른 값보다 크거나 같은지 테스트하는 이항 조건자입니다.
less 지정된 형식의 값이 해당 형식의 다른 값보다 작은지 테스트하는 이항 조건자입니다.
less_equal 지정된 형식의 값이 해당 형식의 다른 값보다 작거나 같은지 테스트하는 이항 조건자입니다.
logical_and 이 클래스는 지정된 값 형식의 요소에 대해 논리곱 논리 연산을 수행하고 결과가 참 또는 거짓인지 테스트하는 미리 정의된 함수 개체를 제공합니다.
logical_not 이 클래스는 지정된 값 형식의 요소에 대해 부정 논리 연산을 수행하고 결과가 참 또는 거짓인지 테스트하는 미리 정의된 함수 개체를 제공합니다.
logical_or 이 클래스는 지정된 값 형식의 요소에 대해 분리 논리 연산을 수행하고 결과가 참 또는 거짓인지 테스트하는 미리 정의된 함수 개체를 제공합니다.
minus 이 클래스는 지정된 값 형식의 요소에 대해 빼기 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다.
모듈러스 이 클래스는 지정된 값 형식의 요소에 대해 모듈러스 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다.
multiplies 이 클래스는 지정된 값 형식의 요소에 대해 곱하기 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다.
negate 이 클래스는 요소 값의 부정을 반환하는 미리 정의된 함수 개체를 제공합니다.
not_equal_to 지정된 형식의 값이 해당 형식의 다른 값과 같지 않은지 테스트하는 이항 조건자입니다.
plus 클래스는 지정된 값 형식의 요소에 대해 더하기 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다.
unary_function 단항 함수 개체를 제공하는 파생 클래스에 상속될 수 있는 형식을 정의하는 빈 기본 클래스입니다.
(C++11에서는 사용되지 않으며 C++17에서는 제거되었습니다.)

개체

속성 설명
_1.._M 대체 가능한 인수에 대한 자리 표시자입니다.

연산자

속성 설명
연산자== 호출 가능 개체의 같음 비교를 허용하지 않습니다.
operator!= 호출 가능 개체의 같지 않음 비교를 허용하지 않습니다.

참고 항목

헤더 파일 참조
C++ 표준 라이브러리의 스레드 보안
C++ 표준 라이브러리 참조