std::bind - cppreference.com
Da cppreference.com.
|
|
Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate. La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
<tbody> </tbody>
| Elemento definito nell'header <functional> |
||
|
|
(1) | (dal C++11) |
|
|
(2) | (dal C++11) |
La bind modello di funzione genera un wrapper per la deviazione di chiamata f. La chiamata a questo involucro è equivalente a invocare f con alcuni dei suoi argomenti legati alla args.
Original:
The function template bind generates a forwarding call wrapper for f. Calling this wrapper is equivalent to invoking f with some of its arguments bound to args.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Internamente, l'involucro contiene un oggetto membro del std::decay<F>::type tipo costruito da std::forward<F>(f), e un oggetto per ciascuna delle args..., di std::decay<Arg_i>::type tipo, analogamente costruito std::forward<Arg_i>(arg_i).
Original:
Internally, the wrapper holds a member object of type std::decay<F>::type constructed from std::forward<F>(f), and one object per each of args..., of type std::decay<Arg_i>::type, similarly constructed from std::forward<Arg_i>(arg_i).
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Parametri
| f | - | oggetto invocabile (oggetto funzione, puntatore a funzione, il riferimento alla funzione, puntatore a funzione membro, o il puntatore ai dati membri), che dovrà essere associata ad alcuni argomenti Original: invocable object (function object, pointer to function, reference to function, pointer to member function, or pointer to member data) that will be bound to some arguments The text has been machine-translated via Google Translate. |
| args | - | elenco di argomenti di legare, con gli argomenti non legati sostituiti dal Original: list of arguments to bind, with the unbound arguments replaced by the placeholders The text has been machine-translated via Google Translate. |
Valore di ritorno
Un oggetto funzione di T tipo specificato, per cui std::is_bind_expression<T>::value == true, e che possono essere memorizzati in std::function. L'oggetto è mobile se f e tutti args sono mobili, ed è copiabile altrimenti. Il tipo definisce i seguenti membri:
Original:
A function object of unspecified type T, for which std::is_bind_expression<T>::value == true, and which can be stored in std::function. The object is movable if f and all args are movable, and is copyable otherwise. The type defines the following members:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
std :: bind
Original:
std::bind
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Return type
std :: bind
Original:
std::bind
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Member type result_type
1) If F is a pointer to function or a pointer to member function, result_type is the return type of F. If F is a class type with nested typedef result_type, then result_type is F::result_type. Otherwise no result_type is defined.
2) result_type is exactly R.
Member function operator()
Given an object g obtained from an earlier call to bind, when it is invoked in a function call expression g(u1, u2, ... uM), an invocation of the stored object of type std::decay<F>::type takes place, with arguments defined as follows:
- If the argument is of type
std::reference_wrapper<T>(e.g. std::ref or std::cref) was used in the initial call tobind, then the referenceT&stored in the bound argument is passed to the invocable object. - If
std::is_bind_expression<T>::value == true(i.e. anothersbindsubexpression was used as an argument in the initial call tobind), then that bind-subexpressin is invoked immediately and its result is passed to the invocable object. If the bind subexpression has any placeholder arguments, they are picked fromu1, u2, .... - If
std::is_placeholder<T>::value != 0(i.e.,_1, _2, _3, ...was used as the argument to the initial call tobind), then the argument indicated by the placeholder (u1for_1,u2for_2, etc) is passed to the invocable object asstd::forward<Uj>(uj). - Otherwise, the stored argument is passed to the invocable object as-is.
If some of the arguments that are supplied in the call to g() are not matched by any placeholders stored in g, the unused arguments are evaluated and discarded.
Eccezioni
Genera solo se la costruzione std::decay<F>::type da std::forward<F>(f) getta, o uno dei costruttori per std::decay<Arg_i>::type dal std::forward<Arg_i>(arg_i) corrsponding getta dove Arg_i è il tipo i-esimo e arg_i è l'argomento-esimo in Args... args.
Original:
Only throws if construction of std::decay<F>::type from std::forward<F>(f) throws, or any of the constructors for std::decay<Arg_i>::type from the corrsponding std::forward<Arg_i>(arg_i) throws where Arg_i is the ith type and arg_i is the ith argument in Args... args.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Note
Gli argomenti di impegnare vengono copiati o spostati, e non sono mai passati per riferimento se non avvolto in std::ref o std::cref.
Original:
The arguments to bind are copied or moved, and are never passed by reference unless wrapped in std::ref or std::cref.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Duplicare segnaposto nell'espressione stessa bind (più _1 per esempio) sono permessi, ma i risultati sono ben definite solo se l'argomento corrispondente (u1) è un rvalue lvalue o non mobile.
Original:
Duplicate placeholders in the same bind expression (multiple _1's for example) are allowed, but the results are only well defined if the corresponding argument (u1) is an lvalue or non-movable rvalue.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Esempio
#include <random> #include <iostream> #include <functional> void f(int n1, int n2, int n3, const int& n4, int n5) { std::cout << n1 << ' ' << n2 << ' ' << n3 << ' ' << n4 << ' ' << n5 << '\n'; } int g(int n1) { return n1; } struct Foo { void print_sum(int n1, int n2) { std::cout << n1+n2 << '\n'; } int data = 10; }; int main() { using namespace std::placeholders; // demonstrates argument reordering and pass-by-reference int n = 7; auto f1 = std::bind(f, _2, _1, 42, std::cref(n), n); n = 10; f1(1, 2, 1001); // 1 is bound by _1, 2 is bound by _2, 1001 is unused // nested bind subexpressions share the placeholders auto f2 = std::bind(f, _3, std::bind(g, _3), _3, 4, 5); f2(10, 11, 12); // common use case: binding a RNG with a distribution std::default_random_engine e; std::uniform_int_distribution<> d(0, 10); std::function<int()> rnd = std::bind(d, e); for(int n=0; n<10; ++n) std::cout << rnd() << ' '; std::cout << '\n'; // bind to a member function Foo foo; auto f3 = std::bind(&Foo::print_sum, foo, 95, _1); f3(5); // bind to member data auto f4 = std::bind(&Foo::data, _1); std::cout << f4(foo) << '\n'; }
Output:
2 1 42 10 7 12 12 12 4 5 1 5 0 2 0 8 2 2 10 8 100 10
Vedi anche
segnaposto per gli argomenti non legate in un'espressione Original: placeholders for the unbound arguments in a The text has been machine-translated via Google Translate. (costante) [modifica] | |
crea un oggetto funzione di un puntatore a un membro Original: creates a function object out of a pointer to a member The text has been machine-translated via Google Translate. (funzione di modello) [modifica] | |