std::is_bind_expression
| Definiert in der Header-Datei <functional> |
||
| template< class T > struct is_bind_expression; |
(seit C++11) | |
Wenn T ein Typ ist, der durch einen Aufruf von std::bind erzeugt wurde (aber nicht von std::bind_front oder std::bind_back), leitet sich diese Vorlage von std::true_type ab. Für jeden anderen Typ (sofern nicht benutzerdefiniert spezialisiert) leitet sich diese Vorlage von std::false_type ab.
Ein Programm kann diese Vorlage für einen programmierdefinierten Typ T spezialisieren, um UnaryTypeTrait mit der Basischarakteristik von std::true_type zu implementieren, um anzuzeigen, dass T von std::bind so behandelt werden soll, als wäre es der Typ eines Bind-Subausdrucks: Wenn ein von bind generiertes Funktionsobjekt aufgerufen wird, wird ein gebundener Argument dieses Typs als Funktionsobjekt aufgerufen und erhält alle nicht gebundenen Argumente, die an das bind-generierte Objekt übergeben wurden.
Inhalt |
[edit] Helper variable template
| template< class T > constexpr bool is_bind_expression_v = is_bind_expression<T>::value; |
(seit C++17) | |
Abgeleitet von std::integral_constant
Member-Konstanten
| value [static] |
true, wenn T ein von std::bind generiertes Funktionsobjekt ist, andernfalls false(öffentliche statische Member-Konstante) |
Memberfunktionen
| operator bool |
konvertiert das Objekt zu bool, gibt value zurück (öffentliche Memberfunktion) |
| operator() (C++14) |
gibt value zurück (öffentliche Memberfunktion) |
Membertypen
| Typ | Definition |
value_type
|
bool |
type
|
std::integral_constant<bool, value> |
[edit] Example
#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() { // as if bind(f, bind(MyBind(), _1, _2), 2) auto b = std::bind(f, MyBind(), 2); std::cout << "Adding 2 to the sum of 10 and 11 gives " << b(10, 11) << '\n'; }
Ausgabe
Adding 2 to the sum of 10 and 11 gives 23
[edit] Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 2010 | C++11 | program-defined specializations could only be derived from std::false_type |
can be derived from std::true_type |
[edit] See also
| (C++11) |
bindet ein oder mehrere Argumente an ein Funktions-Objekt (Funktions-Template) |