模板参数类型推导在函数对象中不起作用
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)
{
// ...
}
现在你的两个函数调用都可以工作了。
我有一个模板函数接受另一个具有模板化参数类型的函数。
使用它时我必须明确指定参数类型 (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)
{
// ...
}
现在你的两个函数调用都可以工作了。