C++ 模板参数类型推断赢得';不能在函数对象中工作
我有一个模板函数,它接受另一个参数类型为模板的函数 使用它时,我必须显式地指定参数类型(1),否则它将无法编译(2)C++ 模板参数类型推断赢得';不能在函数对象中工作,c++,templates,std-function,type-deduction,C++,Templates,Std Function,Type Deduction,我有一个模板函数,它接受另一个参数类型为模板的函数 使用它时,我必须显式地指定参数类型(1),否则它将无法编译(2) 模板 无效过程(const std::function&f) { // ... } 进程([&](constfoo&arg){/*…*/});//(1) 好的! //进程([&](constfoo&arg){/*…*/});//(2) 不行! 有什么诀窍可以让(2)工作吗?让编译器找出整个函数的确切类型: template<typename T> void proc
模板
无效过程(const std::function&f)
{
// ...
}
进程([&](constfoo&arg){/*…*/});//(1) 好的!
//进程([&](constfoo&arg){/*…*/});//(2) 不行!
有什么诀窍可以让(2)工作吗?让编译器找出整个函数的确切类型:
template<typename T>
void process(T&& f)
{
// ...
}
模板
无效流程(T&f)
{
// ...
}
现在两个函数调用都可以工作了。只需让编译器计算出整个函数的确切类型:
template<typename T>
void process(T&& f)
{
// ...
}
模板
无效流程(T&f)
{
// ...
}
现在您的函数调用都会起作用。为什么您在代码中引用了一个“代码< ST/:>函数”代替了一个泛型函数?C++版本??@ BoeTiSOS在没有旧标签的情况下,[C++ ]表示最新的C++,所以C++ 14现在不起作用,因为lambda的闭合类型必须转换为<代码> STD::函数< />它不匹配函数参数类型,因为你要在一个<代码> STD::函数< /C> >代替一个泛型函数?C++版本??@ BoeTiSOS在没有旧标签的情况下,[C++ ]表示最新的C++,因此,C++14现在不起作用,因为lambda的闭包类型必须转换为
std::function
,它与要进行推断的函数参数类型不匹配。如何约束具有特定签名的函数?void(const TYPE&)如何约束具有特定签名的函数?void(常量类型&)