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
函数的第一个参数类型相匹配。