std::binder1st, std::binder2nd
| Definiert in der Header-Datei <functional> |
||
| template< class Fn > Klasse binder1st |
(1) | (in C++11 veraltet) (removed in C++17) |
| template< class Fn > Klasse binder2nd |
(2) | (in C++11 veraltet) (removed in C++17) |
Ein Funktions-Objekt, das ein Argument an eine binäre Funktion bindet.
Der Wert des Parameters wird zur Konstruktionszeit an das Objekt übergeben und innerhalb des Objekts gespeichert. Wann immer das Funktions-Objekt über operator() aufgerufen wird, wird der gespeicherte Wert als eines der Argumente übergeben, das andere Argument wird als Argument von operator() übergeben. Das resultierende Funktions-Objekt ist eine unäre Funktion.
[bearbeiten] Beispiel
#include <cmath> #include <functional> #include <iostream> #include <vector> const double pi = std::acos(-1); // use std::numbers::pi in C++20 int main() { // deprecated in C++11, removed in C++17 auto f1 = std::bind1st(std::multiplies<double>(), pi / 180.0); // C++11 replacement auto f2 = [](double a) { return a * pi / 180.0; }; for (double n : {0, 30, 45, 60, 90, 180}) std::cout << n << "°\t" << std::fixed << "= " << f1(n) << " rad (using binder)\t= " << f2(n) << " rad (using lambda)\n" << std::defaultfloat; }
Ausgabe
0° = 0.000000 rad (using binder) = 0.000000 rad (using lambda) 30° = 0.523599 rad (using binder) = 0.523599 rad (using lambda) 45° = 0.785398 rad (using binder) = 0.785398 rad (using lambda) 60° = 1.047198 rad (using binder) = 1.047198 rad (using lambda) 90° = 1.570796 rad (using binder) = 1.570796 rad (using lambda) 180° = 3.141593 rad (using binder) = 3.141593 rad (using lambda)
[bearbeiten] 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 109 | C++98 | operator() konnte das an sie übergebene Argument nicht ändern |
Überladungen wurden hinzugefügt, um dies zu beheben |
[bearbeiten] Siehe auch
| (in C++11 veraltet)(in C++17 entfernt) |
bindet ein Argument an eine binäre Funktion (Funktionsvorlage) |