模板参数类型推导在函数对象中不起作用

Template argument type deduction won't work within a function object

我有一个模板函数接受另一个具有模板化参数类型的函数。

使用它时我必须明确指定参数类型 (1) 否则它不会编译 (2)。

template<typename T>
void process(const std::function<void(const T &)>& f)
{
   // ...
}

process<Foo>( [&](const Foo& arg){/*...*/} ); // (1) Ok!

// process( [&](const Foo& arg){/*...*/} ); // (2) Won't Work! 

有什么技巧可以让 (2) 起作用吗?

让编译器找出整个函数的确切类型:

template<typename T>
void process(T&& f)
{
   // ...
}

现在你的两个函数调用都可以工作了。