实现function
需要先声明template
#include <iostream>
#include <functional>
using namespace std;
template <typename Signature>
class myfunction;
template<typename R, typename... A> //可变参模板
class myfunction<R(A...)>
{
public:
using PFUNC = R(*)(A...); //需要一个函数指针
myfunction(PFUNC pfunc) :_pfunc(pfunc) {}//使用传入的函数
R operator()(A... arg) { //重载operator()
return _pfunc(arg...);
}
private:
PFUNC _pfunc;
};
void print1(int a) {
cout << a << endl;
}
void print2(string s) {
cout << s << endl;
}
int main() {
myfunction<void(int)> fun1 = print1;
myfunction<void(string)> fun2 = print2;
fun1(999); //打印999
fun2("hello"); //打印hello
}
标签:function,...,pfunc,实现,PFUNC,template,myfunction
From: https://www.cnblogs.com/KongJiBlogs/p/17730911.html