这是我的问题:
我定义一个函子:
我定义一个函子:
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
或者你做的事情之一.