实现function

实现function

需要先声明template class myfunction;下面做特例化template<typename R, typename... A> 需要

#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
}
posted @ 2023-09-26 18:34  霁空  阅读(32)  评论(0)    收藏  举报