다음을 통해 공유


bind Function

인수는 호출할 개체에 바인딩합니다.

template<class Fty, class T1, class T2, ..., class TN>
   unspecified bind(Fty fn, T1 t1, T2 t2, ..., TN tN);
template<class Ret, class Fty, class T1, class T2, ..., class TN>
   unspecified bind(Fty fn, T1 t1, T2 t2, ..., TN tN);

매개 변수

  • Fty
    호출 개체의 형식입니다.

  • TN
    N 번째의 형식 인수를 호출 합니다.

  • fn
    호출 하는 개체입니다.

  • tN
    N 번째 호출 인수입니다.

설명

형식 Fty, T1, T2, ..., TN 복사본 생성을 해야 하 고 INVOKE(fn, t1, ..., tN) 일부 값에는 유효한 식 이어야 합니다 w1, w2, ..., wN.

첫 번째 템플릿 함수가 전달 호출 반환 래퍼 g 약한 결과 형식을 사용 합니다.효과의 g(u1, u2, ..., uM) 입니다 INVOKE(f, v1, v2, ..., vN, result_of Class<Fty cv (V1, V2, ..., VN)>::type)여기서 cv 의 cv 한정자입니다 g 바운드 인수의 형식 및 값 v1, v2, ..., vN 아래에서 지정한 대로 결정 됩니다.이 인수는 맞춤형된 인수 목록이 호출 가능 개체 호출 가능 개체에 바인딩할 수 있습니다.

두 번째 템플릿 함수가 전달 호출 반환 래퍼 g 중첩 형식이 result_type 의 동의어입니다 Ret.효과의 g(u1, u2, ..., uM) 입니다 INVOKE(f, v1, v2, ..., vN, Ret)여기서 cv 의 cv 한정자입니다 g 바운드 인수의 형식 및 값 v1, v2, ..., vN 아래에서 지정한 대로 결정 됩니다.이 인수 호출 가능 개체 맞춤형된 인수 목록 및 반환 형식이 지정된 하는 호출 가능 개체에 바인딩할 수 있습니다.

바운드 인수 값 v1, v2, ..., vN 및 해당 형식을 V1, V2, ..., VN 해당 인수의 형식에 따라 달라 집니다 ti 유형 Ti 호출에 bind cv 한정자 cv 호출 래퍼 g 같이:

if ti is of type reference_wrapper<T> the argument vi is ti.get() and its type Vi is T&;

if the value of std::is_bind_expression<Ti>::value is true the argument vi is ti(u1, u2, ..., uM) and its type Vi is result_of<Ti cv (U1&, U2&, ..., UN&>::type;

if the value j of std::is_placeholder<Ti>::value is not zero the argument vi is uj and its type Vi is Uj&;

otherwise the argument vi is ti and its type Vi is Ti cv &.

예를 들어, 함수를 제공 f(int, int) 식 bind(f, _1, 0) 전달 반환 호출 래퍼 cw 는 cw(x) 전화 f(x, 0).식 bind(f, 0, _1) 전달 반환 호출 래퍼 cw 는 cw(x) 전화 f(0, x).

인수의 호출에 bind 인수 외에도 fn 호출 가능 개체에 전달할 수 있는 인수 수가 같아야 합니다. fn.따라서 bind(cos, 1.0) 잘못 된 모두 bind(cos) 및 bind(cos, _1, 0.0) 올바르지 않습니다.

인수의 함수에서 반환한 호출 래퍼 호출 bind 가장 높은 숫자 값으로 최소한 있어야 is_placeholder<PH>::value 모든 호출에서 인수 자리 표시자에 대 한 bind.따라서 bind(cos, _2)(0.0, 1.0) 잘못 된 (및 반환 cos(1.0)), 및 bind(cos, _2)(0.0) 올바르지 않습니다.

예제

 

// std_tr1__functional__bind.cpp 
// compile with: /EHsc 
#include <functional> 
#include <algorithm> 
#include <iostream> 
 
using namespace std::placeholders; 
 
void square(double x) 
    { 
    std::cout << x << "^2 == " << x * x << std::endl; 
    } 
 
void product(double x, double y) 
    { 
    std::cout << x << "*" << y << " == " << x * y << std::endl; 
    } 
 
int main() 
    { 
    double arg[] = {1, 2, 3}; 
 
    std::for_each(&arg[0], arg + 3, square); 
    std::cout << std::endl; 
 
    std::for_each(&arg[0], arg + 3, std::bind(product, _1, 2)); 
    std::cout << std::endl; 
 
    std::for_each(&arg[0], arg + 3, std::bind(square, _1)); 
 
    return (0); 
    } 
 
  

요구 사항

헤더: <functional>

네임 스페이스: std

참고 항목

참조

is_bind_expression Class

_1 Object