C++ 异步中没有匹配的函数(模板中的未解析类型)
我在重用名为C++ 异步中没有匹配的函数(模板中的未解析类型),c++,asynchronous,future,C++,Asynchronous,Future,我在重用名为evaluate template<typename T> template<typename T2> T2 Polynomial<T>::evaluate(T2 val) const { int degree = 0; return accumulate(coefs.begin(), coefs.end(), T2{0}, [&](T2 res, T coef){ return
evaluate
template<typename T>
template<typename T2>
T2 Polynomial<T>::evaluate(T2 val) const {
int degree = 0;
return accumulate(coefs.begin(), coefs.end(), T2{0},
[&](T2 res, T coef){ return res+coef*pow(val,degree++);} );
}
重用“evaluate”函数会导致错误“no matching function”
在async中(模板中的未解析类型),因此我必须重新制作它
如何修复此错误?
我不明白期货有什么问题。向后推(async(launch::async,this->evaluate(val))代码>
将根据this->evaluate(val)
的结果进行计算并删除
和evaluate应该在val
上调用,而不是p
你应该这样做
std::bind(&Polynomial<T>::evaluate, p, val)
这将使用p
和val
作为参数,从polymone::evaluate
创建一个可调用对象
将根据this->evaluate(val)
的结果进行计算并删除
和evaluate应该在val
上调用,而不是p
你应该这样做
std::bind(&Polynomial<T>::evaluate, p, val)
这将从
polymone::evaluate
创建一个可调用对象,并将p
和val
作为参数您应该更喜欢lambdas而不是std::bind
,除非绝对必要。@Frank您有lambda的解决方案吗?@Tyker,将引用捕获lambda与异步一起使用是个坏主意。@Frank我同意,但在这种情况下,我们可以看到get,并且此时值仍在范围内。为什么要在中为(poly)
调用this->evaluate()
,也许应该是[&]{return p.evaluate(val);}
为p
对象调用evaluate。除非绝对必要,否则您应该更喜欢lambdas而不是std::bind
。@Frank您有lambda的解决方案吗?@Tyker,将引用捕获lambda与异步一起使用是个坏主意。@Frank我同意,但在这种情况下,我们可以看到get,并且值在该点上仍然在范围内。为什么要在中为(polys)
调用this->evaluate()
,可能应该是[&]{return p.evaluate(val);}
调用p
对象的evaluate.i“think”您还遇到了经典的“template function在编译时不被视为模板”问题(如果无法编译您的代码,则很难判断)。this->template evaluate(val);
是修复该问题的时髦语法(由@Tyker提出的问题仍然适用)@Frank我也会遇到同样的错误我“think”您还遇到了经典的“模板函数在编译时不被视为模板”问题(如果无法编译代码,很难说)<代码>此->模板评估(val)是一种时髦的语法,它修复了(由@Tyker提出的问题仍然适用)@Frank我也得到了同样的错误
std::bind(&Polynomial<T>::evaluate, p, val)
[&]{ return p.evaluate(val); }