我定义一个函子:
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?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)