Computer >> Máy Tính >  >> Lập trình >> C ++

Hàm ràng buộc và trình giữ chỗ trong C ++

Ở đây chúng ta sẽ thấy hàm Bind và các trình giữ chỗ trong C ++. Đôi khi chúng ta cần thao tác hoạt động của một số chức năng khi chúng ta cần. Chúng tôi có thể sử dụng một số tham số mặc định để có được một số bản chất của thao tác.

Trong C ++ 11, một tính năng mới được giới thiệu, được gọi là hàm liên kết. Điều này giúp chúng tôi thực hiện thao tác như vậy theo một số cách dễ dàng hơn. Để sử dụng các tính năng này, chúng tôi phải sử dụng tệp tiêu đề .

Liên kết hàm với sự trợ giúp của trình giữ chỗ giúp xác định vị trí và số lượng đối số để sửa đổi hàm theo kết quả đầu ra mong muốn.

Phần giữ chỗ là không gian tên phát hiện vị trí của một giá trị trong một hàm. Phần giữ chỗ được đại diện bởi _1, _2, _3, v.v.

Ví dụ

#include <functional>
#include <iostream>
struct Foo {
   Foo(int num) : num_(num) {}
   void print_add(int i) const { std::cout << num_+i << '\n'; }
   int num_;
};
void print_num(int i) {
   std::cout << i << '\n';
}
struct PrintNum {
   void operator()(int i) const {
      std::cout << i << '\n';
   }
};
int main() {
   std::function<void(int)> f_display = print_num;
   f_display(-9);
   std::function<void()> f_display_42 = []() { print_num(42); };
   f_display_42();
   std::function<void()> f_display_31337 = std::bind(print_num, 31337);
   f_display_31337();
   std::function<void(const Foo&, int)> f_add_display = &Foo::print_add;
   const Foo foo(314159);
   f_add_display(foo, 1);
   std::function<int(Foo const&)> f_num = &Foo::num_;
   std::cout << "num_: " << f_num(foo) << '\n';
   using std::placeholders::_1;
   std::function<void(int)> f_add_display2= std::bind( &Foo::print_add, foo, _1 );
   f_add_display2(2);
   std::function<void(int)> f_add_display3= std::bind( &Foo::print_add, &foo, _1 );
   f_add_display3(3);
   std::function<void(int)> f_display_obj = PrintNum();
   f_display_obj(18);
}

Đầu ra

-9
42
31337
314160
num_: 314159
314161
314162
18