std:: is_bind_expression
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Old binders and adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Definiert im Header
<functional>
|
||
|
template
<
class
T
>
struct is_bind_expression ; |
(seit C++11) | |
Wenn
T
ein Typ ist, der durch einen Aufruf von
std::bind
erzeugt wird (jedoch nicht
std::bind_front
oder
std::bind_back
), ist diese Template-Spezialisierung von
std::true_type
abgeleitet. Für jeden anderen Typ (sofern nicht benutzerdefiniert spezialisiert) ist diese Template-Spezialisierung von
std::false_type
abgeleitet.
Ein Programm kann diese Vorlage für einen
programmdefinierten Typ
T
spezialisieren, um
UnaryTypeTrait
mit Basiseigenschaft von
std::true_type
zu implementieren, um anzuzeigen, dass
T
von
std::bind
so behandelt werden sollte, als wäre es der Typ eines Bind-Subausdrucks: Wenn ein bind-erzeugtes Funktionsobjekt aufgerufen wird, wird ein gebundenes Argument dieses Typs als Funktionsobjekt aufgerufen und erhält alle ungebundenen Argumente, die an das bind-erzeugte Objekt übergeben wurden.
Inhaltsverzeichnis |
Hilfsvariablen-Template
|
template
<
class
T
>
constexpr bool is_bind_expression_v = is_bind_expression < T > :: value ; |
(seit C++17) | |
Geerbt von std:: integral_constant
Member-Konstanten
|
value
[static]
|
true
wenn
T
ein von
std::bind
erzeugtes Funktionsobjekt ist,
false
andernfalls
(öffentliche statische Member-Konstante) |
Member-Funktionen
|
operator bool
|
konvertiert das Objekt zu
bool
, gibt
value
zurück
(öffentliche Member-Funktion) |
|
operator()
(C++14)
|
gibt
value
zurück
(öffentliche Member-Funktion) |
Member-Typen
| Typ | Definition |
value_type
|
bool |
type
|
std:: integral_constant < bool , value > |
Beispiel
#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
Fehlerberichte
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 |
programmdefinierte Spezialisierungen konnten
nur von std::false_type abgeleitet werden |
können von
std::true_type abgeleitet werden |
Siehe auch
|
(C++11)
|
bindet ein oder mehrere Argumente an ein Funktionsobjekt
(Funktions-Template) |