绑定实用程序和模板化函数

时间:2015-12-06 21:29:13

标签: c++ templates bind

它遵循使用中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实用程序与模板化函数一起使用?

1 个答案:

答案 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