functional_bind12
functional_bind12 (bind1st와 bind2nd 바인딩 함수)
이 페이지는 C++ 표준 라이브러리의 bind1st와 bind2nd 함수 템플릿에 대해 설명해요. 이 함수들은 주어진 이항 함수 객체의 첫 번째 또는 두 번째 인자에 특정 값을 고정한 새 함수 객체를 만들어요. C++11에서 deprecated 되었고 C++17에서 제거되었지만, 오래된 코드를 읽거나 유지보수할 때 유용해요.
출처: cppreference
본문
정의
<functional> 헤더에 다음과 같이 정의되어 있어요.
Defined in header <functional> |
||
|---|---|---|
template < class F , class T > std :: binder1st < F > bind1st ( const F & f , const T & x ); |
(1) | (deprecated in C++11) (removed in C++17) |
template < class F , class T > std :: binder2nd < F > bind2nd ( const F & f , const T & x ); |
(2) | (deprecated in C++11) (removed in C++17) |
주어진 이항 함수 객체 f의 첫 번째 또는 두 번째 매개변수에 인자 x를 바인딩해요. 즉, 결과로 만들어지는 래퍼 안에 x를 저장해 두고, 호출 시 x를 f의 첫 번째 또는 두 번째 인자로 전달해요.
매개변수
| 이름 | 설명 |
|---|---|
f |
인자를 바인딩할 함수 객체 (함수 포인터) |
x |
f에 바인딩할 인자 |
반환값
f와 x를 감싸는 함수 객체를 반환해요.
예외
구현에서 정의하는 예외를 던질 수 있어요.
예제
다음 예제는 bind1st를 사용해 각도를 라디안으로 변환하는 함수 객체를 만들어요.
#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); // since C++20 use std::numbers::pi
std::transform(a.begin(), a.end(), r.begin(),
std::bind1st(std::multiplies<double>(), pi / 180.0));
// an equivalent lambda is: [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
관련 항목
binder1st,binder2nd— 이항 함수와 그 인자 중 하나를 보관하는 함수 객체 (클래스 템플릿, C++11에서 deprecated, C++17에서 제거)bind_front,bind_back— 함수 객체에 여러 인자를 순서대로 바인딩하는 함수 템플릿 (C++20, C++23)