ไลบรารี C ++ - <functional>

บทนำ

อ็อบเจ็กต์ฟังก์ชันเป็นอ็อบเจ็กต์ที่ออกแบบมาโดยเฉพาะเพื่อใช้กับไวยากรณ์ที่คล้ายกับฟังก์ชัน อินสแตนซ์ของฟังก์ชัน std :: สามารถจัดเก็บคัดลอกและเรียกใช้เป้าหมายที่เรียกได้ไม่ว่าจะเป็นฟังก์ชันนิพจน์แลมบ์ดานิพจน์การผูกหรืออ็อบเจ็กต์ฟังก์ชันอื่น ๆ ตลอดจนตัวชี้ไปยังฟังก์ชันสมาชิกและตัวชี้ไปยังสมาชิกข้อมูล

คำประกาศ

ต่อไปนี้เป็นคำประกาศสำหรับ std :: function

template<class >
class function;

C ++ 11

template< class R, class... Args >
class function<R(Args...)>

พารามิเตอร์

  • R - result_type

  • argument_type - T if sizeof ... (Args) == 1 และ T เป็นประเภทแรกและชนิดเดียวใน Args

ตัวอย่าง

ในตัวอย่างด้านล่างสำหรับ std :: function

#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);
}

ผลลัพธ์ตัวอย่างควรเป็นดังนี้ -

-9
42
31337
314160
num_: 314159
314161
314162
18

ฟังก์ชั่นสมาชิก

ซีเนียร์ ฟังก์ชั่นสมาชิก คำจำกัดความ
1 (ตัวสร้าง) ใช้เพื่อสร้างอินสแตนซ์ std :: function ใหม่
2 (ผู้ทำลาย) ใช้เพื่อทำลายอินสแตนซ์ std :: function
3 ตัวดำเนินการ = ใช้เพื่อกำหนดเป้าหมายใหม่
4 แลกเปลี่ยน ใช้เพื่อสลับเนื้อหา
5 กำหนด ใช้เพื่อกำหนดเป้าหมายใหม่
6 บูลตัวดำเนินการ ใช้เพื่อตรวจสอบว่ามีเป้าหมายที่ถูกต้องหรือไม่
7 ตัวดำเนินการ () ใช้เพื่อเรียกเป้าหมาย

ฟังก์ชันที่ไม่ใช่สมาชิก

ซีเนียร์ ฟังก์ชันที่ไม่ใช่สมาชิก คำจำกัดความ
1 มาตรฐาน :: แลกเปลี่ยน มันเชี่ยวชาญอัลกอริทึม std :: swap
2 ตัวดำเนินการ == ตัวดำเนินการ! = มันเปรียบเทียบฟังก์ชัน std :: กับ nullptr

คลาสตัวดำเนินการ

ซีเนียร์ คลาสตัวดำเนินการ คำจำกัดความ
1 bit_and เป็นคลาสอ็อบเจ็กต์ AND ฟังก์ชันระดับบิต
2 bit_or เป็นคลาสอ็อบเจ็กต์ระดับบิตหรือฟังก์ชัน
3 bit_xor เป็นคลาสอ็อบเจ็กต์ฟังก์ชัน XOR แบบบิต
3 หาร มันเป็นคลาสอ็อบเจ็กต์ฟังก์ชันการหาร
4 เท่ากับ เป็นคลาสอ็อบเจ็กต์ฟังก์ชันสำหรับการเปรียบเทียบความเท่าเทียมกัน
5 มากขึ้น เป็นคลาสอ็อบเจ็กต์ฟังก์ชันสำหรับการเปรียบเทียบที่มากกว่าอสมการ
6 จำนวนที่มากขึ้น เป็นคลาสอ็อบเจ็กต์ฟังก์ชันสำหรับการเปรียบเทียบที่มากกว่าหรือเท่ากับ
7 น้อยกว่า เป็นคลาสอ็อบเจ็กต์ฟังก์ชันสำหรับการเปรียบเทียบอสมการน้อยกว่า
8 less_equal เป็นคลาสอ็อบเจ็กต์ฟังก์ชันสำหรับการเปรียบเทียบที่น้อยกว่าหรือเท่ากับ
9 logical_and มันเป็นคลาสอ็อบเจ็กต์และฟังก์ชันเชิงตรรกะ
10 logical_not มันเป็นคลาสอ็อบเจ็กต์ NOT เชิงตรรกะ
11 logical_or เป็นคลาสอ็อบเจ็กต์เชิงตรรกะหรือฟังก์ชัน
12 ลบ มันเป็นคลาสอ็อบเจ็กต์ของฟังก์ชันการลบ
13 โมดูลัส มันเป็นคลาสอ็อบเจ็กต์ฟังก์ชันโมดูลัส
14 ทวีคูณ มันเป็นคลาสอ็อบเจ็กต์ฟังก์ชันการคูณ
15 ลบล้าง มันเป็นคลาสอ็อบเจ็กต์ฟังก์ชันเชิงลบ
16 not_equal_to มันเป็นคลาสอ็อบเจ็กต์ของฟังก์ชันสำหรับการเปรียบเทียบแบบไม่เท่าเทียมกัน
17 บวก มันเป็นคลาสอ็อบเจ็กต์ฟังก์ชันเพิ่มเติม