template
<
class
F,
class
T
>
std::
binder1st
<
F
>
bind1st
(
const
F
&
f,
const
T
&
x
)
;
|
(1)
|
(устарело в C++11)
(удалено в C++17)
|
template
<
class
F,
class
T
>
std::
binder2nd
<
F
>
bind2nd
(
const
F
&
f,
const
T
&
x
)
;
|
(2)
|
(устарело в C++11)
(удалено в C++17)
|
|
|
|
|
Привязывает заданный аргумент
x
к первому или второму параметру заданного бинарного функционального объекта
f
. То есть сохраняет
x
внутри результирующей обёртки, которая при вызове передаёт
x
в качестве первого или второго параметра функции
f
.
1)
Привязывает первый аргумент
f
к
x
. Фактически вызывает
std::
binder1st
<
F
>
(
f,
typename
F
::
first_argument_type
(
x
)
)
.
2)
Привязывает второй аргумент функции
f
к
x
. Фактически вызывает
std::
binder2nd
<
F
>
(
f,
typename
F
::
second_argument_type
(
x
)
)
.
Параметры
|
f
|
-
|
указатель на функцию для привязки аргумента
|
|
x
|
-
|
аргумент для привязки к
f
|
Возвращаемое значение
Объект-функция, оборачивающий
f
и
x
.
Исключения
Может выбрасывать исключения, определяемые реализацией.
Пример
#include <algorithm>
#include <cmath>
#include <cstddef>
#include <functional>
#include <iomanip>
#include <iostream>
#include <vector>
int main()
{
std::vector<double> a = {0, 30, 45, 60, 90, 180};
std::vector<double> r(a.size());
const double pi = std::acos(-1); // начиная с C++20 используйте std::numbers::pi
std::transform(a.begin(), a.end(), r.begin(),
std::bind1st(std::multiplies<double>(), pi / 180.0));
// эквивалентная лямбда: [pi](double a) { return a * pi / 180.0; });
for (std::size_t n = 0; n < a.size(); ++n)
std::cout << std::setw(3) << a[n] << "° = " << std::fixed << r[n]
<< " rad\n" << std::defaultfloat;
}
Вывод:
0° = 0.000000 rad
30° = 0.523599 rad
45° = 0.785398 rad
60° = 1.047198 rad
90° = 1.570796 rad
180° = 3.141593 rad
Смотрите также
(устарело в C++11)
(удалено в C++17)
|
функциональный объект, содержащий бинарную функцию и один из её аргументов
(шаблон класса)
|
|
|
привязывает переменное количество аргументов, по порядку, к функциональному объекту
(шаблон функции)
|