为什么我的C编译器不能推导boost函数的模板参数?

为什么我的C编译器不能推导boost函数的模板参数?,第1张

概述我定义一个如下所示的方法: template <class ArgT>void foo(ArgT arg, ::boost::function< void(ArgT) > func){ func(arg);} 并使用它 – 例如 – : foo(2, [](int i) -> void { cout << i << endl; }); 为什么编译器不能推断类型,因为它绝对是一个int 我定义一个如下所示的方法:
template <class ArgT>voID foo(ArgT arg,::boost::function< voID(ArgT) > func){    func(arg);}

并使用它 – 例如 – :

foo(2,[](int i) -> voID { cout << i << endl; });

为什么编译器不能推断类型,因为它绝对是一个int?

我得到’voID foo(ArgT,boost :: function< voID(ArgT)>)’:不能推断’boost :: function< voID(ArgT)>‘的模板参数来自’anonymous-namespace’::< lambda0>.

解决方法 虽然C lambdas是严格单一的,它们只是功能对象(又名函子)的简写,一般函子可以是多态的;即他们的呼叫运算符可能被重载或模板化.因此,函子(和,因此,lambdas)不会隐式地转换为模板的std :: function<> (或boost :: function)实例,因为函数的operator()参数类型不能自动推断.

要略微不同的是,您的lambda表达式的自然类型是一个没有参数的构造函数和带有签名voID operator()(int)const的operator()的函子.然而,显然这个事实可能是你和我,不能自动推断,ArgT应该解决int,因为lambdas是函子和函子的operator()可以重载和模板.

TL; DR:你想要的是不可能的.

总结

以上是内存溢出为你收集整理的为什么我的C编译器不能推导boost函数的模板参数?全部内容,希望文章能够帮你解决为什么我的C编译器不能推导boost函数的模板参数?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1253921.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-07
下一篇2022-06-07

发表评论

登录后才能评论

评论列表(0条)

    保存