c – 将匿名函数对象传递给std :: function?

c – 将匿名函数对象传递给std :: function?,第1张

概述这是我的问题: 我定义一个函子: class A { public: int operator()(int a, int b) const{ return a + b; } };typedef function<int (int, int)> Fun; 那么我使用匿名函子创建一个std :: function对象,我发现一些奇怪的东西.这是我的代码: Fun f(A( 这是我的问题:
我定义一个函子:
class A {  public:    int operator()(int a,int b) const{    return a + b;   } };typedef function<int (int,int)> Fun;

那么我使用匿名函子创建一个std :: function对象,我发现一些奇怪的东西.这是我的代码:

Fun f(A());f(3,4);

不幸的是,这是错误的.错误信息是:

error: invalID conversion from ‘int’ to ‘A (*)()’ [-fpermissive]error: too many arguments to function ‘Fun f(A (*)())’

但是,当我更改我的代码如下:

A a;Fun f(a);f(3,4);

要么

Fun f = A();f(3,4);

结果是对的.
那么为什么呢请帮我理解.谢谢.

解决方法
Fun f(A());

这是most-vexing parse的一个例子.它声明一个函数f返回一个Fun.它需要一个函数指针作为参数,指向不带参数并返回A的函数.

有几种方法可以解决这个问题:

Fun f{A()};    // Uniform-initialisation SyntaxFun f{A{}};    // Uniform-initialisation on both objectsFun f((A()));  // Forcing the initialiser to be an Expression,not parameter List

或者你做的事情之一.

总结

以上是内存溢出为你收集整理的c – 将匿名函数对象传递给std :: function?全部内容,希望文章能够帮你解决c – 将匿名函数对象传递给std :: function?所遇到的程序开发问题。

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

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

原文地址: http://www.outofmemory.cn/langs/1235875.html

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

发表评论

登录后才能评论

评论列表(0条)

保存