CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài blog CFSDN này có giải thích chi tiết về hàm bind của thư viện chuẩn c/c++ được tác giả sưu tầm và biên soạn. Nếu các bạn quan tâm đến bài viết này thì nhớ like nhé.
Hàm liên kết được xác định trong tệp tiêu đề function. Hàm liên kết có thể được coi như một bộ chuyển đổi chức năng chung chấp nhận một đối tượng có thể gọi được và tạo ra một đối tượng có thể gọi được mới để "điều chỉnh" danh sách tham số của đối tượng ban đầu.
hàm liên kết: nhận tên hàm làm tham số và tạo hàm mới.
?
1
|
tự động newCallable = bind(callbale, arg_list);
|
Các tham số trong arg_list có thể bao gồm _1, _2, v.v., là các tham số của hàm mới newCallable.
Trong blog giới thiệu về biểu thức lambda này, vấn đề về tham số thứ ba của find_if đã được thảo luận. Vào thời điểm đó, vấn đề này đã được giải quyết bằng biểu thức lambda.
Giải pháp: liên kết(check_size, _1, sz).
?
1
|
auto idx = find_if(svec.begin(),svec.end(),bind(check_size, _1, 6));
|
Trên thực tế, newCall= bind(check_size, _1, sz) trả về một hàm mới newCall. newCall này chỉ chấp nhận một tham số, đáp ứng chính xác các yêu cầu của find_if.
•Từ quan điểm của find_if, à, newCall là một hàm có một tham số, OK, không vấn đề gì. •Theo quan điểm của người lập trình, check_size là một hàm có hai tham số, nhưng sz(6) bị ràng buộc trước với newCall •Khi newCall(s) được gọi, check_size(s, 6) thực sự được gọi. cũng có 2 tham số, ngoại trừ tham số thứ hai có giá trị mặc định là 6. newCall(const string &s, size_t sz = 6); nên khi gọi newCall, chỉ cần truyền một tham số là đủ.
Lưu ý: _1, _2, v.v. được đặt trong phần giữ chỗ của vùng tên, vì vậy hãy sử dụng:
?
1
2
|
sử dụng
không gian tên
std::chỗ giữ chỗ;
|
sử dụng tham số liên kết:
?
1
2
|
tự động g = liên kết(func, a, b, _2, c, _1);
|
Gọi g(X, Y) tương đương với func(a, b, Y, c, X).
ví dụ:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
#include
#include
#include
#include
#include
sử dụng
không gian tên
tiêu chuẩn;
sử dụng
không gian tên
std::chỗ giữ chỗ;
bool
kiểm tra kích thước(
hằng số
chuỗi &s, string::size_type sz){
trở lại
s. kích thước() >= sz;
}
bool
ngắn hơn(
hằng số
chuỗi &a,
hằng số
chuỗi &b){
trở lại
a. kích thước() < b. kích thước();
}
ostream&in(ostream&os,
hằng số
chuỗi &s,
hằng số
char
&c){
trở lại
hệ điều hành << s << c;
}
số nguyên
chủ yếu(){
ostream &os = cout;
hằng số
char
c =
''
;
vector svec{
"aab"
,
"đ"
,
"à"
,
"bb"
,
"e"
,
"bbb"
};
for_each(svec.begin(),svec.end(),[&os, c](
hằng số
chuỗi &s){
hệ điều hành << s << c;
});
os << kết thúc;
for_each(svec.begin(),svec.end(),bind(print, ref(os), _1, cref(c)));
os << kết thúc;
cout << c << endl;
}
|
Tóm tắt.
Trên đây là giải thích chi tiết về chức năng liên kết của thư viện chuẩn c/C++ được biên tập viên giới thiệu. Tôi hy vọng nó sẽ hữu ích cho bạn. Nếu có thắc mắc vui lòng để lại tin nhắn cho tôi và biên tập viên sẽ trả lời bạn. thời gian. Tôi cũng xin cảm ơn mọi người đã ủng hộ trang web của tôi! .
Liên kết gốc: https://www.cnblogs.com/xiaoshiwang/archive/2018/09/20/9678769.html.
Cuối cùng, bài viết này về giải thích chi tiết về hàm liên kết của thư viện chuẩn c/C++ kết thúc tại đây. Nếu bạn muốn biết thêm về giải thích chi tiết về hàm liên kết của thư viện chuẩn c/C++, vui lòng tìm kiếm các bài viết về CFSDN hoặc. tiếp tục duyệt các bài viết liên quan. Tôi hy vọng tất cả các bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!