当前位置:首页 > 编程笔记 > 正文
已解决

C++(17):invoke

来自网友在路上 167867提问 提问时间:2023-11-11 18:26:06阅读次数: 67

最佳答案 问答题库678位专家为你答疑解惑

C++调用函数有多种形式,普通函数和函数指针使用(),成员函数通过.或->进行调用。

如果在模板中调用不同类型的函数,这会是一个问题,因为调用的形式是不一致的。

C++17引入了invoke,用来从形式上统一函数调用:

#include <iostream>
#include <functional>
using namespace std;auto f1 = [](int a, int b) { return a + b; };int f2(int a, int b) { return a + b; }class F{
public:int f3(int a, int b) { return a + b; };
};int main()
{cout<<invoke(f1, 1, 2)<<endl;cout<<invoke(f2, 1, 2)<<endl;cout<<invoke(F::f3, F(), 1, 2)<<endl;return 0;
}运行程序输出
3
3
3

可以看到通过invoke,调用普通函数与成员函数在形式上是一致的了。

另外需要说明的是invoke还支持对类虚函数的多态调用:

#include <iostream>
#include <functional>
using namespace std;class B{
public:virtual int add(int a, int b) {cout<<"in B"<<endl;return a + b;}
};class D 
查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"C++(17):invoke":http://eshow365.cn/6-37850-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!