#include<iostream>
using namespace std;
void common(int a, string s)
{
cout << a << " " << s << endl;
}
using fptr = void(*)(int, string);//函数指针
class A
{
public:
//仿函数
void operator() (string s)
{
cout << s << endl;
}
//类对象转函数指针
operator fptr()
{
return f;
}
static void f(int a, string s)
{
cout << a << " " << s << endl;
}
};
class Test
{
public:
Test(const function<void(int, string)>& f) :callback(f) {}
void notify(int id, string name)
{
callback(id, name);
}
private:
function<void(int, string)>callback;
};
//给以下情况提供统一的函数调用接口
int main()
{
//1.包装普通函数
function<void(int, string)> f1 = common;
f1(1, "普通函数");
//2.包装类静态成员函数
function<void(int, string)>f2 = A::f;
f2(2, "类静态成员函数");
//3.仿函数
A a;
function<void(string)>f3 = a;
f3("4 仿函数");
//4.转换为函数指针的对象
A b;
function<void(int, string)>f4 = a;
a(5, "转换为函数指针的对象");
}
可调用对象包装器
最新推荐文章于 2024-07-16 08:39:08 发布