函数指针的模板参数推导失败

Template argument deduction failed for function pointer

编译器无法扣除函数指针的模板参数。

template< class Function >
class foobar {
    Function f;
public:
    foobar(Function _f) : f(_f) {}

};

函数定义为

bool foo(string a, string b) {
    // SOMETHING
}

我在下一行遇到问题

foobar f(foo);

编译错误

error: missing template arguments before ‘f’

目前,无法通过模板化构造函数推断对象的类型。但是,制造商功能可以提供帮助:

template<class T>
foobar<T> make_foobar(const T& t) {
    return Foobar<T>(t);
}

...
auto f = make_foobar(foo);