std::bind
是C++11中引入的一個功能強大的函數模板,它可以生成可調用對象的實例。std::bind
的常見用法包括:
參數綁定:std::bind
可以將參數綁定到函數或可調用對象上,生成一個新的可調用對象。例如:
#include <iostream>
#include <functional>
void print_sum(int a, int b) {
std::cout << a + b << std::endl;
}
int main() {
auto bound_print_sum = std::bind(print_sum, 10, std::placeholders::_1);
bound_print_sum(20); // 輸出30
}
在這個例子中,std::bind
將print_sum
函數的第一個參數綁定為10,第二個參數使用占位符std::placeholders::_1
表示。然后,將生成的可調用對象bound_print_sum
傳遞給一個整數參數20,輸出結果為30。
成員函數綁定:std::bind
可以將成員函數綁定到對象實例上,生成一個新的可調用對象。例如:
#include <iostream>
#include <functional>
class MyClass {
public:
void print_data(int data) {
std::cout << "Data: " << data << std::endl;
}
};
int main() {
MyClass obj;
auto bound_print_data = std::bind(&MyClass::print_data, &obj, std::placeholders::_1);
bound_print_data(42); // 輸出"Data: 42"
}
在這個例子中,std::bind
將MyClass
類的print_data
成員函數綁定到對象obj
上,并將成員函數的第一個參數使用占位符std::placeholders::_1
表示。然后,將生成的可調用對象bound_print_data
傳遞給一個整數參數42,輸出結果為"Data: 42"。
綁定表達式:std::bind
可以與其他C++表達式一起使用,生成一個新的可調用對象。例如:
#include <iostream>
#include <functional>
int add(int a, int b) {
return a + b;
}
int main() {
auto add_five = std::bind(add, 5, std::placeholders::_1);
int result = add_five(3); // 結果為8
std::cout << "Result: " << result << std::endl;
}
在這個例子中,std::bind
將add
函數的第一個參數綁定為5,第二個參數使用占位符std::placeholders::_1
表示。然后,將生成的可調用對象add_five
傳遞給一個整數參數3,輸出結果為8。