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

前端之家收集整理的这篇文章主要介绍了c – 将匿名函数对象传递给std :: function?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这是我的问题:
我定义一个函子:
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 Syntax
Fun f{A{}};    // Uniform-initialisation on both objects
Fun f((A()));  // Forcing the initialiser to be an expression,not parameter list

或者你做的事情之一.

原文链接:https://www.f2er.com/c/116629.html

猜你在找的C&C++相关文章