std::bind
是C++11中引入的一個功能強大的函數模板,它允許你將函數、成員函數或者可調用對象與其參數進行綁定,生成一個新的可調用對象。你可以通過以下幾種方式向std::bind
傳遞參數:
#include <iostream>
#include <functional>
void print_sum(int a, int b) {
std::cout << "Sum: " << a + b << std::endl;
}
int main() {
auto bound_print_sum = std::bind(print_sum, 5, 3);
bound_print_sum(); // 輸出 "Sum: 8"
return 0;
}
在這個例子中,我們將print_sum
函數的兩個參數(5和3)直接傳遞給std::bind
,生成一個新的可調用對象bound_print_sum
。
#include <iostream>
#include <functional>
void print_product(int a, int b) {
std::cout << "Product: " << a * b << std::endl;
}
int main() {
auto bound_print_product = std::bind(print_product, 5, std::placeholders::_1);
bound_print_product(3); // 輸出 "Product: 15"
return 0;
}
在這個例子中,我們使用std::placeholders::_1
作為占位符,表示我們將在調用綁定函數時傳遞一個參數。然后,我們將這個占位符作為參數傳遞給std::bind
,生成一個新的可調用對象bound_print_product
。最后,我們調用bound_print_product
并傳遞一個參數(3),它將替換占位符并計算乘積。
#include <iostream>
#include <functional>
class MyClass {
public:
void print_data(int a, int b) {
std::cout << "Data: " << a + b << std::endl;
}
};
int main() {
MyClass obj;
auto bound_print_data = std::bind(&MyClass::print_data, &obj, std::placeholders::_1, std::placeholders::_2);
bound_print_data(5, 3); // 輸出 "Data: 8"
return 0;
}
在這個例子中,我們有一個名為MyClass
的類,其中包含一個名為print_data
的成員函數。我們使用std::bind
將成員函數print_data
與MyClass
的對象obj
綁定,并使用占位符表示參數。然后,我們調用綁定的函數并傳遞參數(5和3),它將替換占位符并計算和。