在C++中,std::bind
用于將函數、成員函數或可調用對象與其參數綁定在一起,以便稍后調用
#include <iostream>
#include <functional>
#include <stdexcept>
// 一個簡單的函數,可能拋出異常
int risky_function(int a, int b) {
if (b == 0) {
throw std::runtime_error("Division by zero");
}
return a / b;
}
int main() {
// 綁定函數和參數
auto bound_function = std::bind(risky_function, 10, std::placeholders::_1);
try {
// 調用綁定的函數
int result = bound_function(5); // 這里傳入5作為第二個參數
std::cout << "Result: " << result << std::endl;
} catch (const std::runtime_error& e) {
// 捕獲并處理異常
std::cerr << "Error: " << e.what() << std::endl;
}
return 0;
}
在這個例子中,我們創建了一個名為risky_function
的函數,它接受兩個整數參數并執行除法操作。如果第二個參數(即除數)為零,函數將拋出一個std::runtime_error
異常。
我們使用std::bind
將risky_function
與參數10
和占位符std::placeholders::_1
綁定在一起,創建了一個名為bound_function
的可調用對象。然后,在main
函數中,我們嘗試調用bound_function
并傳入一個值作為第二個參數。由于我們傳遞了一個非零值,因此不會拋出異常,程序將輸出結果。
然而,如果我們傳遞一個零值作為第二個參數,risky_function
將拋出異常。在這種情況下,我們使用try-catch
塊捕獲并處理異常,輸出錯誤信息。