它遵循使用中bind
函数的最小示例
它编译并且确实非常简单。
#include <functional>
void fn(int i) { }
int main() {
int x = 0;
auto f = std::bind(fn, x);
}
我有兴趣用模板化的功能做同样的事情 它遵循上面的例子,即使稍作修改。这个没有编译,但它确切地解释了预期的行为。
#include <functional>
template<typename T>
void fn(T t) { }
int main() {
int x = 0;
auto f = std::bind(fn, x);
}
一个非常简单的问题:是否可以将bind
实用程序与模板化函数一起使用?
答案 0 :(得分:1)
我认为明显的解决方案是下面的代码。
#include <functional>
template<typename T>
void fn(T t) { }
int main() {
int x = 0;
auto f = std::bind(fn<int>, x);
}
如果您不想具体了解实例化,也许您可以再添加一个模板级别。我正在做一些测试。
编辑:我花了几个小时独自思考,谷歌搜索我的印刷TC ++ PL4Ed,以及阅读GNU的libstdc ++源代码的实现,我没想到我也没找到你怎么做的。
事实证明,当您将fn
作为模板的名称时,它不能再用作对象的名称。由于std::bind
从其参数的(类型)中推断出它的返回类型,因此只使用fn
变得无效。要使一个可调用对象符合std::bind
的第一个参数,您现在必须实例化模板fn
。