已解决
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 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: C语言--每日五道选择题--Day6
- 下一篇: Pytorch实战教程(一)-神经网络与模型训练