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

时间:2017-06-20 09:02:41

标签: c++ templates std-function type-deduction

我有一个模板函数,它带有模板化参数类型的另一个函数。

使用它时我必须明确指定参数类型(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)工作有什么诀窍吗?

1 个答案:

答案 0 :(得分:5)

让编译器弄清楚整个函数的确切类型:

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

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