首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用lambda表达式的高阶函数的模板参数推导/替换失败

使用lambda表达式的高阶函数的模板参数推导/替换失败
EN

Stack Overflow用户
提问于 2016-12-09 03:20:21
回答 1查看 251关注 0票数 0

所以我想创建一个模板函数,它接受一个函数作为T类型的参数。

代码语言:javascript
复制
#include<functional>
template<typename T>
T bisection(T xL, T xR, T epsilon, std::function<T(T)> fx)

现在,在主程序中,下面的调用给出了错误。

代码语言:javascript
复制
 bisection(0.0, 2.0, 0.001, [](double x){return x*x-2;})

错误消息:

代码语言:javascript
复制
bisection.cpp: In function ‘int main()’:
bisection.cpp:24:65: error: no matching function for call to 
‘bisection(double, double, double, main()::<lambda(double)>)’
cout << bisection(0.0, 2.0, 0.001, [](double x){return x*x-2;}) << endl;
                                                             ^
bisection.cpp:6:3: note: candidate: template<class T> T bisection(T, T,
T, std::function<T(T)>)
T bisection(T xL, T xR, T epsilon, std::function<T(T)> fx)
^
bisection.cpp:6:3: note:   template argument deduction/substitution  failed:
bisection.cpp:24:65: note:   ‘main()::<lambda(double)>’ is not derived from ‘std::function<T(T)>’
cout << bisection(0.0, 2.0, 0.001, [](double x){return x*x-2;}) << endl;

请建议如何纠正此错误。如果我将二等分的函数签名改为:

代码语言:javascript
复制
T bisection(T xL, T xR, T epsilon, std::function<double(double)> fx)
EN

回答 1

Stack Overflow用户

发布于 2016-12-09 03:23:05

lambda不是std::function,更简单的应该是

代码语言:javascript
复制
template<typename T, template F>
T bisection(T xL, T xR, T epsilon, F&& fx);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41047215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档