bind Function
Argumenty sváže callable objektu.
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);
Parametry
Fty
Typ objektu, který chcete volat.TN
Typ n-tá volání argument.fn
Objekt volání.tN
Argument n-tý volání.
Poznámky
Typy Fty, T1, T2, ..., TN musí být kopie constructible, a INVOKE(fn, t1, ..., tN) musí být platný výraz pro některé hodnoty w1, w2, ..., wN.
Vrátí první šablona funkce předávání volání wrapper g s typem slabý výsledek.Efekt g(u1, u2, ..., uM) je INVOKE(f, v1, v2, ..., vN, result_of Class<Fty cv (V1, V2, ..., VN)>::type), kde cv je kvalifikátory cv z g a hodnoty a typy Vázané argumenty v1, v2, ..., vN je zjištěno, jak je uvedeno níže.Pomocí argumentů callable objekt callable objekt argument přesný seznam svázat.
Druhá funkce šablony vrátí předávání volání wrapper g s vnořeného typu result_type je synonymum pro Ret.Efekt g(u1, u2, ..., uM) je INVOKE(f, v1, v2, ..., vN, Ret), kde cv je kvalifikátory cv z g a hodnoty a typy Vázané argumenty v1, v2, ..., vN je zjištěno, jak je uvedeno níže.Pomocí svázat callable objekt callable objekt seznamu přizpůsobený argumentů a zadaný typ vrácené argumenty.
Hodnoty Vázané argumenty v1, v2, ..., vN a jejich odpovídající typy V1, V2, ..., VN , závisí na typu odpovídající argument ti typu Ti ve volání bind kvalifikátory cv a cv z obálky volání g takto:
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 &.
Například dané funkce f(int, int) výraz bind(f, _1, 0) vrátí předávání volání wrapper cw , cw(x) volání f(x, 0).Výraz bind(f, 0, _1) vrátí předávání volání wrapper cw , cw(x) volání f(0, x).
Počet argumentů ve volání bind kromě argumentu fn musí být roven počtu argumentů, které lze předat objekt callable fn.Proto bind(cos, 1.0) je správná a obě bind(cos) a bind(cos, _1, 0.0) jsou nesprávné.
Počet argumentů funkce volání wrapper volání vrácené bind musí být velké jako nejvyšší hodnota číslované is_placeholder<PH>::value pro všechny argumenty zástupného symbolu ve volání bind.Proto bind(cos, _2)(0.0, 1.0) správné (a vrátí cos(1.0)), a bind(cos, _2)(0.0) je nesprávná.
Příklad
// 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);
}
Požadavky
Záhlaví: <functional>
Obor názvů: std