bind Function
Wiąże obiekt wpłacone argumentów.
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 obiektu do wywołania.TN
Typ arytmetyczny wywoływać argument.fn
Obiekt do wywołania.tN
Wywołanie n-ty argument.
Uwagi
Typy Fty, T1, T2, ..., TN kopia musi być constructible, i INVOKE(fn, t1, ..., tN) musi być prawidłowym wyrażeniem niektóre wartości w1, w2, ..., wN.
Pierwsza funkcja szablonu zwraca wywołanie przekazywanie otoki g z typem słabych wyników.Efekt g(u1, u2, ..., uM) jest INVOKE(f, v1, v2, ..., vN, result_of Class<Fty cv (V1, V2, ..., VN)>::type), gdzie cv jest kwalifikatory cv z g i wartości i typy argumentów związany v1, v2, ..., vN są określone, jak określono poniżej.Użyj go powiązać argumenty wpłacone obiekt, aby wpłacone obiekt z listy argumentów dostosowane.
Druga funkcja szablonu zwraca wywołanie przekazywanie otoki g z typu zagnieżdżonego result_type oznacza to synonim Ret.Efekt g(u1, u2, ..., uM) jest INVOKE(f, v1, v2, ..., vN, Ret), gdzie cv jest kwalifikatory cv z g i wartości i typy argumentów związany v1, v2, ..., vN są określone, jak określono poniżej.Użyj go powiązać argumenty wpłacone obiektu do obiektu wpłacone, z listy argumentów dostosowane i określony typ zwrotu.
Wartości argumentów związany z v1, v2, ..., vN i ich odpowiednie typy V1, V2, ..., VN zależą od typu odpowiedniego argumentu ti typu Ti w wywołaniu bind kwalifikatory cv i cv z otoki wywołanie g następująco:
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 &.
Na przykład, biorąc pod uwagę funkcji f(int, int) wyrażenie bind(f, _1, 0) zwraca przekazywanie wywołania otoki cw takie, że cw(x) wywołania f(x, 0).Wyrażenie bind(f, 0, _1) zwraca przekazywanie wywołania otoki cw takie, że cw(x) wywołania f(0, x).
Liczba argumentów w wywołaniu bind oprócz argumentu fn musi być równa liczbie argumentów, które mogą być przekazywane do obiektu wpłacone fn.W ten sposób bind(cos, 1.0) jest poprawna i w obu bind(cos) i bind(cos, _1, 0.0) są nieprawidłowe.
Otoki wywołanie zwrócony przez wywołanie liczba argumentów funkcji bind musi być przynajmniej tak duży jak najwyższą wartość numerowane is_placeholder<PH>::value dla wszystkich argumentów zastępczy w wywołaniu bind.Tak więc bind(cos, _2)(0.0, 1.0) jest poprawny (i zwraca cos(1.0)), i bind(cos, _2)(0.0) jest niepoprawna.
Przykład
// 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);
}
Wymagania
Nagłówek: <functional>
Obszar nazw: std