rnd*_*gen 1 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!
Run Code Online (Sandbox Code Playgroud)
让(2)工作有什么诀窍吗?
让编译器弄清楚整个函数的确切类型:
template<typename T>
void process(T&& f)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
现在你的两个函数调用都可以.