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