C++ 的 std::bind
可以綁定模板函數,但需要使用 std::placeholders
或 std::ref
作為占位符。下面是一個使用 std::bind
和模板函數的例子:
#include <iostream>
#include <functional>
template<typename T, typename U>
T add(T t, U u) {
return t + u;
}
int main() {
auto boundAdd = std::bind(add<int, int>, std::placeholders::_1, 42);
std::cout << "Result: " << boundAdd(3) << std::endl; // 輸出 "Result: 45"
return 0;
}
在這個例子中,我們定義了一個模板函數 add
,它接受兩個參數并返回它們的和。然后我們使用 std::bind
和 std::placeholders::_1
作為占位符來創建一個綁定到 add
函數的可調用對象 boundAdd
。最后,我們調用 boundAdd
并傳遞一個參數,得到結果。
注意,當使用 std::bind
時,占位符的類型必須與模板函數的參數類型匹配。在這個例子中,我們使用了 std::placeholders::_1
作為占位符,它的類型是 T
,與 add
函數的第一個參數類型相匹配。