invoke"/>
C++(17):invoke
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
更多推荐
C++(17):invoke
发布评论