std::is_bind_expression
| Défini dans l'en-tête <functional>
|
||
template< class T >
struct is_bind_expression;
|
(depuis C++11) | |
Si T est un type produit par un appel à std::bind (mais pas std::bind_front ou std::bind_front), ce modèle est dérivé de std::true_type. Pour tout autre type (sauf spécialisation par l'utilisateur), ce modèle est dérivé de std::false_type.
Un programme peut spécialiser ce modèle pour un type défini par le programme T afin d'implémenter UnaryTypeTrait avec la caractéristique de base de std::true_type pour indiquer que T doit être traité par std::bind comme s'il s'agissait du type d'une sous-expression de liaison : lorsqu'un objet fonction généré par bind est invoqué, un argument lié de ce type sera invoqué en tant qu'objet fonction et recevra tous les arguments non liés passés à l'objet généré par bind.
Modèle de variable d'assistance
|
template
<
class
T
>
constexpr bool is_bind_expression_v = is_bind_expression < T > :: value ; |
(depuis C++17) | |
Hérité de std:: integral_constant
Constantes membres
|
value
[static]
|
true
si
T
est un objet fonction généré par
std::bind
,
false
sinon
(constante membre publique statique) |
Fonctions membres
|
operator bool
|
convertit l'objet en
bool
, retourne
value
(fonction membre publique) |
|
operator()
(C++14)
|
retourne
value
(fonction membre publique) |
Types membres
| Type | Définition |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
Exemple
#include <functional> #include <iostream> #include <type_traits> struct MyBind { typedef int result_type; int operator()(int a, int b) const { return a + b; } }; namespace std { template<> struct is_bind_expression<MyBind> : public true_type {}; } int f(int n1, int n2) { return n1 + n2; } int main() { // comme si bind(f, bind(MyBind(), _1, _2), 2) auto b = std::bind(f, MyBind(), 2); std::cout << "Ajouter 2 à la somme de 10 et 11 donne " << b(10, 11) << '\n'; }
Sortie :
Ajouter 2 à la somme de 10 et 11 donne 23
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 2010 | C++11 |
program-defined specializations could
only be derived from std::false_type |
can be derived from
std::true_type |
Voir aussi
|
(C++11)
|
lie un ou plusieurs arguments à un objet fonction
(modèle de fonction) |