다음을 통해 공유


<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 멤버가 없습니다.

모든 호출 래퍼는 이동 생성자 및 복사 생성자가 있습니다. 간단한 호출 래퍼는 할당 연산자를 갖는 호출 래퍼입니다. 해당 복사 생성자, 이동 생성자 및 할당 연산자는 예외를 던지지 않습니다. 전달 호출 래퍼는 임의의 인수 목록을 사용하여 호출될 수 있는 호출 래퍼이며, 이는 래핑된 호출 가능 개체에게 인자를 참조로써 전달합니다. 모든 오른쪽 값 인자는 왼쪽 값 참조로써 전달되며, 왼쪽 값 인자는 왼쪽 값 참조로써 전달됩니다.

클래스

bad_function_call

개체가 비었기 때문에 함수 개체에서 operator()에의 호출이 실패하는 것을 보여주기 위해 던져지는 예외를 설명하는 클래스

binary_negate

지정된 이항 함수의 반환 값을 무효화하는 멤버 함수를 제공하는 템플릿 클래스.

binder1st

이항 함수의 첫 번째 인수에 지정된 값을 결합하여 이항 함수 개체를 단항 함수 개체로 변환하는 생성자를 제공하는 템플릿 클래스

binder2nd

이항 함수의 두 번째 인수에 지정된 값을 결합하여 이항 함수 개체를 단항 함수 개체로 변환하는 생성자를 제공하는 템플릿 클래스

const_mem_fun_ref_t

단항 함수 개체로 호출되어 참조 인수를 사용하여 초기화될 때 인수를 취하지 않는 상수 멤버 함수를 사용할 수 있는 어댑터 클래스

const_mem_fun_t

단항 함수 개체로 호출되어 포인터 인수를 사용하여 초기화될 때 인수를 취하지 않는 상수 멤버 함수를 사용할 수 있는 어댑터 클래스

const_mem_fun1_ref_t

이항 함수 개체로 호출되어 참조 인수를 사용하여 초기화될 때 하나의 인수를 취하는 상수 멤버 함수를 사용할 수 있는 어댑터 클래스

const_mem_fun1_t

이항 함수 개체로 호출되어 포인터 인수를 사용하여 초기화될 때 하나의 인수를 취하는 상수 멤버 함수를 사용할 수 있는 어댑터 클래스

function

호출 가능 개체를 래핑하는 클래스

hash

값에 대한 해시 코드를 계산하는 클래스

is_bind_expression

특정 형식이 bind를 호출하여 생성되었는지를 테스트하는 클래스

is_placeholder

특정 형식의 자리 표시자인지를 테스트 하는 클래스

mem_fun_ref_t

단항 함수 개체로 호출되어 참조 인수를 사용하여 초기화될 때 인수를 취하지 않는 non_const 멤버 함수를 사용할 수 있는 어댑터 클래스

mem_fun_t

단항 함수 개체로 호출되어 포인터 인수를 사용하여 초기화될 때 인수를 취하지 않는 non_const 멤버 함수를 사용할 수 있는 어댑터 클래스

mem_fun1_ref_t

이항 함수 개체로 호출되어 참조 인수를 사용하여 초기화될 때 하나의 인수를 취하는 non_const 멤버 함수를 사용할 수 있는 어댑터 클래스

mem_fun1_t

이항 함수 개체로 호출되어 포인터 인수를 사용하여 초기화될 때 하나의 인수를 취하는 non_const 멤버 함수를 사용할 수 있는 어댑터 클래스

pointer_to_binary_function

적응 가능한 이항 함수는 이항 함수 포인터로 변환합니다.

pointer_to_unary_function

적응 가능한 단항 함수는 단항 함수 포인터로 변환합니다.

reference_wrapper

참조를 래핑하는 클래스

result_of

래핑된 호출 가능 개체의 반환 형식을 포함하는 구조체

unary_negate

지정된 단항 함수의 반환 값을 무효화하는 멤버 함수를 제공하는 템플릿 클래스.

함수

bind

호출 가능 객체에 인수를 바인딩합니다.

bind1st

이항 함수의 첫 번째 인수에 지정된 값을 결합하여 이항 함수 개체를 단항 함수 개체로 변환하는 어댑터를 만드는 헬퍼 템플릿 함수

bind2nd

이항 함수의 두 번째 인수에 지정된 값을 결합하여 이항 함수 개체를 단항 함수 개체로 변환하는 어댑터를 만드는 헬퍼 템플릿 함수

bit_and

두 매개 변수의 비트 논리 AND (이항 연산자&) 를 반환합니다.

bit_not

매개 변수의 비트 논리 보수 (연산자~) 를 반환합니다.

bit_or

두 매개 변수의 비트 논리 OR (이항 연산자|) 를 반환합니다.

bit_xor

두 매개 변수의 비트 논리 XOR (이항 연산자^) 를 반환합니다.

cref

인수에서 상수 reference_wrapper를 생성합니다.

mem_fn

간단한 호출 래퍼를 생성합니다.

mem_fun

헬퍼 템플릿 함수는 멤버 함수에 대해 함수 객체 어댑터를 생성하는 데에 포인터 인수를 사용하여 초기화하는 경우 사용됩니다.

mem_fun_ref

헬퍼 템플릿 함수는 멤버 함수에 대해 함수 객체 어댑터를 생성하는 데에 참조 인수를 사용하여 초기화하는 경우 사용됩니다.

not1

단항 술어의 보수를 반환합니다.

not2

이항 술어의 보수를 반환합니다.

ptr_fun

헬퍼 템플릿 함수는 단항 및 이항 함수 포인터를 각각 단항 및 이항 적응 가능한 함수로 변환하는 데에 사용됩니다.

ref

인수에서 reference_wrapper를 생성합니다.

스왑

두 function 개체를 바꿉니다.

Structs

binary_function

이항 함수 개체를 제공하는 파생된 클래스에 의해 상속될 수 있는 형식을 정의하는 빈 기본 클래스

divides

이 클래스는 지정된 값 형식의 요소들 간 나눗셈 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다.

equal_to

지정된 형식의 값이 다른 값과 같은지 여부를 테스트하는 이항 술어

greater

지정된 형식의 값이 다른 값보다 큰지 여부를 테스트하는 이항 술어

greater_equal

지정된 형식의 값이 다른 값보다 크거나 같은지 여부를 테스트하는 이항 술어

less

지정된 형식의 값이 다른 값보다 작은지 여부를 테스트하는 이항 술어

less_equal

지정된 형식의 값이 다른 값보다 작거나 같은지 여부를 테스트하는 이항 술어

logical_and

이 클래스는 지정된 값 형식의 요소들 간에 결합 논리 연산을 수행하고 결과의 참 거짓을 테스트하는 미리 정의된 함수 개체를 제공합니다.

logical_not

이 클래스는 지정된 값 형식의 요소들 간에 부정 논리 연산을 수행하고 결과의 참 거짓을 테스트하는 미리 정의된 함수 개체를 제공합니다.

logical_or

이 클래스는 지정된 값 형식의 요소들 간에 분리 논리 연산을 수행하고 결과의 참 거짓을 테스트하는 미리 정의된 함수 개체를 제공합니다.

빼기

이 클래스는 지정된 값 형식의 요소들 간 빼기 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다.

modulus

이 클래스는 지정된 값 형식의 요소들 간 모듈러 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다.

multiplies

이 클래스는 지정된 값 형식의 요소들 간 곱셈 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다.

negate

이 클래스는 요소 값의 부정을 반환하는 미리 정의된 함수 개체를 제공합니다.

not_equal_to

지정된 형식의 값이 다른 값과 같지 않은지 여부를 테스트하는 이항 술어

더하기

이 클래스는 지정된 값 형식의 요소들 간 덧셈 산술 연산을 수행하는 미리 정의된 함수 개체를 제공합니다.

unary_function

단항 함수 개체를 제공하는 파생된 클래스에 의해 상속될 수 있는 형식을 정의하는 빈 기본 클래스

개체

_1.._M

대체 가능한 인수 자리 표시자

연산자

operator==

호출 가능 개체의 상등 비교를 허용하지 않습니다.

operator!=

호출 가능 개체의 같지 않음 비교를 허용하지 않습니다.

참고 항목

참조

C++ 표준 라이브러리의 스레드 보안

표준 템플릿 라이브러리

기타 리소스

<functional> 멤버

C++ 표준 라이브러리 헤더 파일