Namespaces
Variants

std::function의 추론 가이드std::function

From ko.cppreference.net
 
 
유틸리티 라이브러리
일반 유틸리티
관계 연산자 (C++20에서 폐지됨)
정수 비교 함수
(C++20)(C++20)(C++20)    
(C++20)
교체타입 연산
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
공통 어휘 타입
(C++11)
(C++17)
(C++17)
(C++17)
(C++11)
(C++17)
(C++23)



 
함수 객체
함수 호출
(C++17)(C++23)
항등 함수 객체
(C++20)
투명 연산자 래퍼
(C++14)
(C++14)
(C++14)
(C++14)  
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)

이전 바인더 및 어댑터
(C++17까지*)
(C++17까지*)
(C++17까지*)
(C++17까지*)  
(C++17까지*)
(C++17까지*)(C++17까지*)(C++17까지*)(C++17까지*)
(C++20까지*)
(C++20까지*)
(C++17까지*)(C++17까지*)
(C++17까지*)(C++17까지*)

(C++17까지*)
(C++17까지*)(C++17까지*)(C++17까지*)(C++17까지*)
(C++20까지*)
(C++20까지*)
 
 
헤더 <functional>
template< class R, class... ArgTypes >
function( R(*)(ArgTypes...) ) -> function<R(ArgTypes...)>;
에 정의됨 (1) (C++17부터)
template< class F >
function( F ) -> function</*see below*/>;
(2) (C++17부터)
template< class F >
function( F ) -> function</*see below*/>;
(3) (C++23부터)
template< class F >
function( F ) -> function</*see below*/>;
(4) (C++23부터)
1) 함수로부터 추론을 허용하기 위해 std::function에 대해 이 추론 가이드가 제공됩니다.
2) 이 오버로드는 &F::operator()을(를) 평가되지 않은 피연산자로 처리할 때 올바른 형식이고, decltype(&F::operator())이(가) R(G::*)(A...) (선택적 cv-한정, 선택적 noexcept, 선택적 lvalue 참조 한정) 형식인 경우에만 오버로드 해석에 참여합니다. 추론된 타입은 std::function<R(A...)>입니다.
3) 이 오버로드는 &F::operator()을(를) 평가되지 않은 피연산자로 처리할 때 올바른 형식이고 F::operator()이(가) 타입이 명시적 객체 매개변수 함수인 경우에만 오버로드 해석에 참여하며, 해당 타입은 R(G, A...) 또는 R(G, A...) noexcept 형식입니다. 추론된 타입은 std::function<R(A...)>입니다.
4) 이 오버로드는 &F::operator()을(를) 평가되지 않은 피연산자로 처리할 때 올바른 형식이고 F::operator()이(가) 타입이 정적 멤버 함수인 경우에만 오버로드 해석에 참여하며, 해당 타입은 R(A...) 또는 R(A...) noexcept 형식입니다. 추론된 타입은 std::function<R(A...)>입니다.

참고 사항

이러한 추론 가이드는 생략 부호 매개변수 를 가진 함수로부터의 추론을 허용하지 않으며, 타입 내의 ... 는 항상 팩 확장 으로 처리됩니다.

이러한 추론 가이드에 의해 추론된 유형은 이후 표준 개정에서 변경될 수 있습니다 (특히, 이후 표준에서 noexcept 지원이 std::function 에 추가되는 경우 이런 일이 발생할 수 있습니다).

예제

#include <functional>
int func(double) { return 0; }
int main() {
  std::function f{func}; // 가이드 #1이 function<int(double)>를 추론함
  int i = 5;
  std::function g = [&](double) { return i; }; // 가이드 #2가 function<int(double)>를 추론함
}

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 3238 C++17 (2) 의 동작이
F :: operator ( ) 가 &&-qualified일 때 불명확했음
오버로드 해결에서 제외되도록 명확히 함