Compartilhar via


bind Function

Associa argumentos para um objeto acessível.

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);

Parâmetros

  • Fty
    O tipo de objeto a chamada.

  • TN
    O tipo de argumento Nth de chamada.

  • fn
    O objeto a chamada.

  • tN
    O Nth argumento de chamada.

Comentários

Os tipos Fty, T1, T2, ..., TN devem ser cópia construtível, e INVOKE(fn, t1, ..., tN) deve ser uma expressão válida para alguns valores w1, w2, ..., wN.

A primeira função do modelo retorna um wrapper g da chamada de transferência com um tipo livre de resultado.O efeito de g(u1, u2, ..., uM) é INVOKE(f, v1, v2, ..., vN,result_of Class<Ftycv(V1, V2, ..., VN)>::type), onde é cv os CV- qualificadores de g e os valores e os tipos dos argumentos são v1, v2, ..., vN são determinados conforme especificado em.Você usa para associar argumentos para um objeto acessível para fazer um objeto acessível com uma lista de argumentos personalizado.

A segunda função do modelo retorna um wrapper g da chamada de transferência com um tipo aninhado result_type que é um sinónimo para Ret.O efeito de g(u1, u2, ..., uM) é INVOKE(f, v1, v2, ..., vN, Ret), onde é cv os CV- qualificadores de g e os valores e os tipos dos argumentos são v1, v2, ..., vN são determinados conforme especificado em.Você usa para associar argumentos para um objeto acessível para fazer um objeto acessível com uma lista de argumentos personalizado com um tipo de retorno especificado.

Os valores dos argumentos são v1, v2, ..., vN e seus tipos correspondentes V1, V2, ..., VN dependem do tipo de argumento correspondente ti de tipo Ti na chamada a bind e em CV- qualificadores cv envoltório g da seguinte maneira:

se ti é do tipo reference_wrapper<T> o argumento vi é ti.get() e o tipo Vi é T&;

se o valor de std::is_bind_expression<Ti>::value é true o argumento vi é ti(u1, u2, ..., uM) e o tipo Vi é result_of<Ticv(U1&, U2&, ..., UN&>::type;

se o valor j de std::is_placeholder<Ti>::value não é zero o argumento vi é uj e o tipo Vi é Uj&;

se o argumento vi não é ti e o tipo Vi é Ticv&.

Por exemplo, dado uma função f(int, int) a expressão bind(f, _1, 0) retorna um wrapper cw da chamada de transmissão de forma que cw(x) chama f(x, 0).A expressão bind(f, 0, _1) retorna um wrapper cw da chamada de transmissão de forma que cw(x) chama f(0, x).

O número de argumentos em uma chamada para bind além do argumento fn deve ser igual ao número de argumentos que podem ser passados para o objeto acessível fn.Assim, bind(cos, 1.0) estiver correto, e bind(cos) e bind(cos, _1, 0.0) estão incorretos.

O número de argumentos para a chamada de função ao wrapper de chamada retornado por bind deve ser pelo menos tão grande como o valor o maior número par de is_placeholder<PH>::value para todos os argumentos de espaço reservado na chamada a bind.Assim, bind(cos, _2)(0.0, 1.0) está correto (e retorna cos(1.0)), e bind(cos, _2)(0.0) está incorreto.

Exemplo

 

// 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); 
    } 
 
  

Requisitos

Cabeçalho: <functional>

namespace: STD

Consulte também

Referência

is_bind_expression Class

_1 Object