기능(C++)

Functional (C++)

프로그래밍 언어 C++의 맥락에서 는 C++ 표준 라이브러리의 일부이며 산술, 비교 및 로직을 위한 연산을 포함하여 함수 오브젝트에 사전 정의된 클래스 템플릿 세트를 제공하는 헤더 파일을 나타냅니다.이러한 클래스 템플릿의 인스턴스는 함수 호출 연산자를 정의하는 C++ 클래스이며 이러한 클래스의 인스턴스[1]함수인 처럼 호출할 수 있습니다.사전 정의된 함수 개체와 함수 개체 어댑터를 조합하는 것만으로 새로운 함수 개체를 쓰지 않고도 매우 정교한 작업을 수행할 수 있습니다.

클래스 템플릿std::function C++11이 제공하는 범용 다형 함수 래퍼입니다.의 인스턴스std::function는 임의의 콜 가능 타깃(어나니머스 함수, 람다 표현(어나니머스 함수를 정의하는 표현), 바인드 표현(일부 인수의 값을 제공함으로써 함수를 보다 작은 arity의 다른 함수로 변환하는 함수 어댑터의 조합) 또는 기타 함수 오브젝트)을 저장, 복사 및 호출할 수 있습니다.

C++ 표준 라이브러리에서 제공되는 알고리즘에는 3개 이상의 인수를 가진 함수 객체가 필요하지 않습니다.부울 값을 반환하는 함수 객체는 중요한 특수한 경우입니다.반환 유형이 다음과 같은 단항 함수입니다.bool술어라고 불리며, 반환 유형이 다음과 같은 이진 함수입니다.bool를 이진 술어라고 합니다.

적응 가능한 기능 객체

일반적으로 함수 개체에는 인수 유형에 제한이 있습니다.다만, 타입의 제한은 단순할 필요는 없습니다.operator()오버로드되었거나 멤버템플릿일 수 있습니다마찬가지로 프로그램이 이러한 제한이 무엇인지 결정할 방법이 없습니다.단, 적응 가능한 함수 객체는 인수와 반환 유형을 지정하고, 이러한 유형의 이름을 지정하여 프로그램에서 사용할 수 있도록 중첩된 를 제공합니다.타입의 경우F0적응 가능한 발전기의 모델입니다.그러면 이 모델을 정의해야 합니다.F0::result_type마찬가지로,F1적응 가능한 단항 함수의 모델이다.F1::argument_type그리고.F1::result_type, 및 만약F2적응 가능한 이진 함수의 모델입니다.F2::first_argument_type,F2::second_argument_type,그리고.F2::result_typeC++ 표준 라이브러리는 기본 클래스를 제공합니다.unary_function그리고.binary_function적응 가능한 단항 함수와 적응 가능한 이진 함수의 정의를 단순화합니다.

적응형 함수 객체는 함수 객체 어댑터(다른 함수 객체를 변환하거나 조작하는 함수 객체)에서 사용할 수 있기 때문에 중요합니다.C++ 표준 라이브러리는 다음과 같은 다양한 기능 객체 어댑터를 제공합니다.unary_negate(적합 가능한 특정 술어에 의해 반환된 값의 논리적 보완을 반환한다.)unary_compose그리고.binary_compose함수 객체의 합성을 수행합니다.

미리 정의된 함수 개체

C++ 표준 라이브러리는 헤더 파일에 포함되어 있습니다. functional산술 연산을 포함한 다양한 사전 정의된 함수 개체(plus,minus,multiplies,divides,modulus,그리고.negate비교 ( )equal_to,not_equal_to,greater,less,greater_equal,그리고.less_equal및 논리 연산(logical_and,logical_or,그리고.logical_not를 참조해 주세요.[1]

함수 래퍼는 일반 함수 또는 람다 식에 의해 작성된 함수 오브젝트에 대한 호출에 사용할 수 있습니다.

#실패하다 <iostream> #실패하다 <기능>  /* 템플릿 함수 정의 */ 템플릿 < >타이프네임 T> 무효 값 인쇄(T 가치) {   표준::외치다 << > 가치 << > 표준::; }  인트 주된(무효) {   /* 함수에 대한 함수 래퍼 */   표준::기능.< >무효(인트)> 기능 = 값 인쇄< >인트>;   기능(2015);    /* 함수 포인터에 대한 함수 래퍼 */   표준::기능.< >무효(인트)> 기능 = &값 인쇄< >인트>;   기능(2016);    /* 람다 함수에 대한 함수 래퍼.*/   표준::기능.< >무효(인트)> 기능 = [](인트 가치) {     표준::외치다 << > 가치 << > 표준::;   };   기능(2017);    /* std::bind()에 의해 생성된 함수 래퍼. * 바인딩 시 사전 정의된 매개 변수를 전달합니다. */   표준::기능.< >무효(무효)> 기능 = 표준::묶다(값 인쇄< >표준::스트링>, "PI는");   기능();    /* std::bind()에 의해 생성된 함수 래퍼. * 함수를 호출할 때 매개 변수를 전달합니다. */   표준::기능.< >무효(흘러가다)> 기능 =       표준::묶다(값 인쇄< >흘러가다>, 표준::플레이스 홀더::_1);   기능(3.14159); } 

함수 래퍼는 클래스의 멤버 변수 및 멤버 함수에 액세스하기 위해서도 사용할 수 있습니다.

#실패하다 <iostream> #실패하다 <기능>  템플릿 < >타이프네임 T> 학급 CAny 데이터 {  일반의:   CAny 데이터(T 가치) : m_value{가치} {}   무효 인쇄(무효) { 표준::외치다 << > m_value << > 표준::; }   무효 추가 후 인쇄(T 가치) { 표준::외치다 << > (m_value + 가치) << > 표준::; }    T m_value; };  인트 주된() {   /* 클래스의 멤버 변수에 대한 함수 래퍼 */   CAny 데이터< >인트> data_a{2016};   표준::기능.< >인트(CAny 데이터< >인트> &)> 기능 = &CAny 데이터< >인트>::m_value;   표준::외치다 << > 기능(data_a) << > 표준::;    /* 매개 변수를 전달하지 않고 멤버 함수에 대한 함수 래퍼 */   CAny 데이터< >흘러가다> data_b{2016.1};   표준::기능.< >무효(CAny 데이터< >흘러가다> &)> 기능 = &CAny 데이터< >흘러가다>::인쇄;   기능(data_b);    /* 매개 변수를 전달하는 함수에 대한 함수 래퍼 */   표준::기능.< >무효(CAny 데이터< >흘러가다> &, 흘러가다)> 기능 =       &CAny 데이터< >흘러가다>::추가 후 인쇄;   기능(data_b, 0.1);    /* std::bind */에 의해 생성된 멤버 함수에 대한 함수 래퍼입니다.   표준::기능.< >무효(흘러가다)> 기능 = 표준::묶다(&CAny 데이터< >흘러가다>::추가 후 인쇄,                                                 &data_b, 표준::플레이스 홀더::_1);   기능(0.2); } 

레퍼런스

  1. ^ a b Josuttis, Nicolai M. (1999). The C++ Standard Library. Addison-Wesley. ISBN 978-0-201-37926-6.

외부 링크