<functional>
functors라고도 알려진 함수 개체와 그 바인더를 생성하는 데에 도움을 주는 표준 라이브러리 함수를 정의합니다. 함수 개체는 operator()를 정의하는 형식의 개체입니다. 함수 개체는 함수 포인터가 될 수 있지만, 일반적으로 함수 개체는 함수를 호출하는 동안 접근할 수 있는 추가적인 정보를 저장하기 위해 사용됩니다.
#include <functional>
설명
알고리즘이 두 가지 형식의 함수 개체를 요구: 단항 및 이항 단항 함수 개체는 하나의 인수를 필요로 하며, 이항 함수 개체는 두 개의 인수를 필요로 합니다. 함수 개체와 함수 포인터는 알고리즘에 술어로써 전달될 수 있습니다. 하지만 함수 개체는 또한 융통성이 있으며, STL의 범위, 유연성 및 효율성을 증가시킵니다. 예를 들어, 알고리즘에 전달되기 전에 함수에 바인딩 되어야 하는 값의 경우에는 함수 포인터가 사용될 수 없습니다. 함수 어댑터는 함수 포인터를 값으로 바인딩될 수 있는 적응 가능한 있는 함수 개체로 변환합니다. 헤더 <기능>은 또한 멤버 함수가 적응 가능한 함수 개체로 호출될 수 있도록 허용하는 멤버 함수 어댑터를 포함합니다. 함수는 그들의 인수와 반환 형식을 지정하는 중첩된 형식 선언을 가진 경우 적응 가능합니다. C++ 표준은 이 적응성이 unary_function 혹은 binary_function 기본 클래스로부터 상속받은 모든 표준 개체 클래스가 구현되는 것을 요구합니다. 함수 개체 및 해당 어댑터는 STL이 기존 응용 프로그램을 업그레이드하는 것을 허용하며 ST이을 C++ 프로그래밍 환경에 통합되도록 돕습니다.
함수 개체의 Visual C++ <기능적> 구현은 투명 연산자 functors를 포함합니다. 이는 표준 함수 개체의 전문화이며 템플릿 매개 변수를 취하지 않으면서 함수 인자의 완벽한 전달과 결과의 완벽한 반환을 수행합니다. 이 기능은 C++ 14 초안 표준 사양의 일부입니다. 이러한 템플릿 전문화는 산술, 비교, 논리 및 비트 연산자 functors를 호출할 때 인자의 형식을 지정하도록 요구하지 않습니다. 산술, 비교, 논리 또는 비트 연산자를 사용자 지정 형식 또는 이질적인 조합의 형식으로 재정의할 수 있으며, 그리고 나서 투명 연산자 functors를 함수 인수로 사용할 수 있습니다. 예를 들어, MyType 형식이 operator<를 구현한다면, 명시적으로 sort(my_collection.begin(), my_collection.end(), less<MyType>()) 형식을 지정하는 대신 sort(my_collection.begin(), my_collection.end(), less<>())를 호출할 수 있습니다.
C++11/C++14 구현
C++11/C++14의 Visual C++ 구현에는 다음과 같은 기능이 추가되었습니다.
호출 서명은 괄호로 묶이고 쉼표로 구분된 0개 이상의 인수 형식의 목록에 뒤이은 반환 형식의 이름입니다.
호출 가능한 형식은 함수의 포인터, 멤버 함수의 포인터, 멤버 데이터의 포인터 혹은 해당 개체가 함수 호출 연산자의 왼쪽에 즉시 나타나는 클래스 형식입니다.
호출 가한 개체는 호출 가능한 형식의 개체입니다.
호출 래퍼 형식은 호출 가능 개체를 보관하고 해당 개체로의 호출 작업을 지원하는 형식입니다.
호출 래퍼는 호출 래퍼 형식의 개체입니다.
대상 개체는 호출 래퍼 개체에 의해 보관되는 호출 가능 개체입니다.
의사 함수 INVOKE(f, t1, t2, ..., tN)는 다음 중 하나를 의미합니다:
f는 T 클래스의 멤버 함수를 가리키는 포인터이며 t1 은 T 형식의 개체 혹은 T 형식의 개체에 대한 참조 혹은 T로부터 파생된 형식의 개체에 대한 참조일 때 (t1.*f)(t2, ..., tN)
f가 T 클래스의 멤버 함수의 포인터이며 t1이 이전 항목에서 설명한 형식 중 하나가 아닌 경우, ((*t1).*f)(t2, ..., tN)
N == 1이면서 f는 T 클래스의 멤버 데이터를 가리키는 포인터이며 t1 은 T 형식의 개체 혹은 T 형식의 개체에 대한 참조 혹은 T로부터 파생된 형식의 개체에 대한 참조일 경우 t1.*f
N == 1 이면서 f는 T 클래스의 멤버 데이터에 대한 포인터이고 t1이 이전 항목에서 설명한 형식 중 하나가 아닌 경우 (*t1).*f
다른 모든 경우 f(t1, t2, ..., tN)
의사 함수 INVOKE(f, t1, t2, ..., tN, R)은 암시적으로 R로 변환된 INVOKE(f, t1, t2, ..., tN)를 의미합니다.
호출 래퍼가 약한 결과 형식을 갖는 경우, 그 멤버 형의 형식인 result_type 형식은 다음과 같이 대상 래퍼 개체의 T 형식을 기준으로 합니다:
T가 함수에 대한 포인터인 경우, result_type은 T의 반환 형식과 동의어입니다.
T가 멤버 함수에 대한 포인터인 경우, result_type은 T의 반환 형식과 동의어입니다.
T가 result_type 형식의 멤버를 갖는 클래스 형식인 경우, result_type은 T::result_type와 동의어입니다.
그렇지 않으면, result_type 멤버가 없습니다.
모든 호출 래퍼는 이동 생성자 및 복사 생성자가 있습니다. 간단한 호출 래퍼는 할당 연산자를 갖는 호출 래퍼입니다. 해당 복사 생성자, 이동 생성자 및 할당 연산자는 예외를 던지지 않습니다. 전달 호출 래퍼는 임의의 인수 목록을 사용하여 호출될 수 있는 호출 래퍼이며, 이는 래핑된 호출 가능 개체에게 인자를 참조로써 전달합니다. 모든 오른쪽 값 인자는 왼쪽 값 참조로써 전달되며, 왼쪽 값 인자는 왼쪽 값 참조로써 전달됩니다.
클래스
개체가 비었기 때문에 함수 개체에서 operator()에의 호출이 실패하는 것을 보여주기 위해 던져지는 예외를 설명하는 클래스 |
|
지정된 이항 함수의 반환 값을 무효화하는 멤버 함수를 제공하는 템플릿 클래스. |
|
이항 함수의 첫 번째 인수에 지정된 값을 결합하여 이항 함수 개체를 단항 함수 개체로 변환하는 생성자를 제공하는 템플릿 클래스 |
|
이항 함수의 두 번째 인수에 지정된 값을 결합하여 이항 함수 개체를 단항 함수 개체로 변환하는 생성자를 제공하는 템플릿 클래스 |
|
단항 함수 개체로 호출되어 참조 인수를 사용하여 초기화될 때 인수를 취하지 않는 상수 멤버 함수를 사용할 수 있는 어댑터 클래스 |
|
단항 함수 개체로 호출되어 포인터 인수를 사용하여 초기화될 때 인수를 취하지 않는 상수 멤버 함수를 사용할 수 있는 어댑터 클래스 |
|
이항 함수 개체로 호출되어 참조 인수를 사용하여 초기화될 때 하나의 인수를 취하는 상수 멤버 함수를 사용할 수 있는 어댑터 클래스 |
|
이항 함수 개체로 호출되어 포인터 인수를 사용하여 초기화될 때 하나의 인수를 취하는 상수 멤버 함수를 사용할 수 있는 어댑터 클래스 |
|
호출 가능 개체를 래핑하는 클래스 |
|
값에 대한 해시 코드를 계산하는 클래스 |
|
특정 형식이 bind를 호출하여 생성되었는지를 테스트하는 클래스 |
|
특정 형식의 자리 표시자인지를 테스트 하는 클래스 |
|
단항 함수 개체로 호출되어 참조 인수를 사용하여 초기화될 때 인수를 취하지 않는 non_const 멤버 함수를 사용할 수 있는 어댑터 클래스 |
|
단항 함수 개체로 호출되어 포인터 인수를 사용하여 초기화될 때 인수를 취하지 않는 non_const 멤버 함수를 사용할 수 있는 어댑터 클래스 |
|
이항 함수 개체로 호출되어 참조 인수를 사용하여 초기화될 때 하나의 인수를 취하는 non_const 멤버 함수를 사용할 수 있는 어댑터 클래스 |
|
이항 함수 개체로 호출되어 포인터 인수를 사용하여 초기화될 때 하나의 인수를 취하는 non_const 멤버 함수를 사용할 수 있는 어댑터 클래스 |
|
적응 가능한 이항 함수는 이항 함수 포인터로 변환합니다. |
|
적응 가능한 단항 함수는 단항 함수 포인터로 변환합니다. |
|
참조를 래핑하는 클래스 |
|
래핑된 호출 가능 개체의 반환 형식을 포함하는 구조체 |
|
지정된 단항 함수의 반환 값을 무효화하는 멤버 함수를 제공하는 템플릿 클래스. |
함수
호출 가능 객체에 인수를 바인딩합니다. |
|
이항 함수의 첫 번째 인수에 지정된 값을 결합하여 이항 함수 개체를 단항 함수 개체로 변환하는 어댑터를 만드는 헬퍼 템플릿 함수 |
|
이항 함수의 두 번째 인수에 지정된 값을 결합하여 이항 함수 개체를 단항 함수 개체로 변환하는 어댑터를 만드는 헬퍼 템플릿 함수 |
|
두 매개 변수의 비트 논리 AND (이항 연산자&) 를 반환합니다. |
|
매개 변수의 비트 논리 보수 (연산자~) 를 반환합니다. |
|
두 매개 변수의 비트 논리 OR (이항 연산자|) 를 반환합니다. |
|
두 매개 변수의 비트 논리 XOR (이항 연산자^) 를 반환합니다. |
|
인수에서 상수 reference_wrapper를 생성합니다. |
|
간단한 호출 래퍼를 생성합니다. |
|
헬퍼 템플릿 함수는 멤버 함수에 대해 함수 객체 어댑터를 생성하는 데에 포인터 인수를 사용하여 초기화하는 경우 사용됩니다. |
|
헬퍼 템플릿 함수는 멤버 함수에 대해 함수 객체 어댑터를 생성하는 데에 참조 인수를 사용하여 초기화하는 경우 사용됩니다. |
|
단항 술어의 보수를 반환합니다. |
|
이항 술어의 보수를 반환합니다. |
|
헬퍼 템플릿 함수는 단항 및 이항 함수 포인터를 각각 단항 및 이항 적응 가능한 함수로 변환하는 데에 사용됩니다. |
|
인수에서 reference_wrapper를 생성합니다. |
|
두 function 개체를 바꿉니다. |
Structs
이항 함수 개체를 제공하는 파생된 클래스에 의해 상속될 수 있는 형식을 정의하는 빈 기본 클래스 |
|
이 클래스는 지정된 값 형식의 요소들 간 나눗셈 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다. |
|
지정된 형식의 값이 다른 값과 같은지 여부를 테스트하는 이항 술어 |
|
지정된 형식의 값이 다른 값보다 큰지 여부를 테스트하는 이항 술어 |
|
지정된 형식의 값이 다른 값보다 크거나 같은지 여부를 테스트하는 이항 술어 |
|
지정된 형식의 값이 다른 값보다 작은지 여부를 테스트하는 이항 술어 |
|
지정된 형식의 값이 다른 값보다 작거나 같은지 여부를 테스트하는 이항 술어 |
|
이 클래스는 지정된 값 형식의 요소들 간에 결합 논리 연산을 수행하고 결과의 참 거짓을 테스트하는 미리 정의된 함수 개체를 제공합니다. |
|
이 클래스는 지정된 값 형식의 요소들 간에 부정 논리 연산을 수행하고 결과의 참 거짓을 테스트하는 미리 정의된 함수 개체를 제공합니다. |
|
이 클래스는 지정된 값 형식의 요소들 간에 분리 논리 연산을 수행하고 결과의 참 거짓을 테스트하는 미리 정의된 함수 개체를 제공합니다. |
|
이 클래스는 지정된 값 형식의 요소들 간 빼기 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다. |
|
이 클래스는 지정된 값 형식의 요소들 간 모듈러 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다. |
|
이 클래스는 지정된 값 형식의 요소들 간 곱셈 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다. |
|
이 클래스는 요소 값의 부정을 반환하는 미리 정의된 함수 개체를 제공합니다. |
|
지정된 형식의 값이 다른 값과 같지 않은지 여부를 테스트하는 이항 술어 |
|
이 클래스는 지정된 값 형식의 요소들 간 덧셈 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다. |
|
단항 함수 개체를 제공하는 파생된 클래스에 의해 상속될 수 있는 형식을 정의하는 빈 기본 클래스 |
개체
대체 가능한 인수 자리 표시자 |
연산자
호출 가능 개체의 상등 비교를 허용하지 않습니다. |
|
호출 가능 개체의 같지 않음 비교를 허용하지 않습니다. |