ไลบรารี 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 | บวก | มันเป็นคลาสอ็อบเจ็กต์ฟังก์ชันเพิ่มเติม |