Namespaces
Variants

C++ named requirements: Callable

From cppreference.net
C++ named requirements

Callable 타입은 INVOKE INVOKE<R> 연산(예를 들어 std::function , std::bind , 그리고 std::thread::thread 에서 사용됨)이 적용 가능한 타입입니다.

INVOKE 는 라이브러리 함수 std::invoke 를 사용하여 명시적으로 수행할 수 있습니다.

(C++17부터)

INVOKE<R> 는 라이브러리 함수 std::invoke_r 를 사용하여 명시적으로 수행할 수 있습니다.

(C++23부터)

목차

요구사항

타입 T 가 다음 조건을 만족하면 Callable 을 만족합니다

주어진

  • f , T 타입의 객체,
  • ArgTypes , 적절한 인수 타입 목록,
  • R , 적절한 반환 타입.

다음 표현식들은 유효해야 합니다:

Expression Requirements
INVOKE<R> ( f, std:: declval < ArgTypes > ( ) ... ) 해당 표현식이 평가되지 않은 컨텍스트에서 올바른 형태를 가짐.

참고 사항

데이터 멤버에 대한 포인터 Callable 입니다, 비록 함수 호출이 발생하지 않더라도.

표준 라이브러리

또한, 다음 표준 라이브러리 기능들은 Callable 타입을 모두 허용합니다 ( FunctionObject 만이 아닌):

(C++11)
복사 생성 가능한 모든 호출 가능 객체의 복사 가능 래퍼
(클래스 템플릿)
주어진 호출 시그니처에서 한정자를 지원하는 모든 호출 가능 객체의 이동 전용 래퍼
(클래스 템플릿)
주어진 호출 시그니처에서 한정자를 지원하는 모든 복사 생성 가능한 호출 가능 객체의 복사 가능 래퍼
(클래스 템플릿)
모든 호출 가능 객체의 비소유 래퍼
(클래스 템플릿)
(C++11)
함수 객체에 하나 이상의 인수를 바인딩합니다
(함수 템플릿)
(C++20) (C++23)
가변 개수의 인수를 순서대로 함수 객체에 바인딩합니다
(함수 템플릿)
CopyConstructible CopyAssignable 참조 래퍼
(클래스 템플릿)
(C++11) (removed in C++20) (C++17)
호출 가능 객체를 인수 집합으로 호출한 결과 타입을 추론합니다
(클래스 템플릿)
(C++11)
별도의 스레드를 관리합니다
(클래스)
(C++20)
std::thread 자동 조인 및 취소 지원을 포함한
(클래스)
(C++11)
여러 스레드에서 호출되더라도 함수를 한 번만 호출합니다
(함수 템플릿)
(C++11)
함수를 비동기적으로 실행하고(새 스레드에서 실행될 수 있음) 결과를 담을 std::future 를 반환합니다
(함수 템플릿)
함수를 패키징하여 비동기적 검색을 위해 반환 값을 저장합니다
(클래스 템플릿)

참고 항목

주어진 인수 타입들로 (마치 std::invoke 를 사용하듯) 호출 가능한 타입인지 확인합니다
(클래스 템플릿)
호출 가능 타입이 주어진 인수 타입 집합으로 호출될 수 있음을 명시합니다
(컨셉)
(C++17) (C++23)
주어진 인수들로 임의의 Callable 객체를 호출합니다 및 반환 타입 지정 가능 (C++23부터)
(함수 템플릿)