RT
#include <iostream> template<typename T> class some_function {}; //部分特化 20190828 template<typename R,typename A, typename A2> class some_function<R(A,A2)> { }; //部分特化 20190828 template<typename R,typename A> class some_function<R(A)> { public: template<typename F> some_function(F f); template<typename F> some_function & operator=(F f) { CallBase *tmp = _f; _f = new Call<F>(f); delete tmp; return *this; } ~some_function(); R operator()(A a) { return _f->invoke(a); } private: //定义常规基类为了可以定义成员变量CallBase *_f,否则实例化模板类Call *_f没法实现 20190828 class CallBase { public: virtual ~CallBase() {} virtual R invoke(A) = 0; }; template<typename T1> class Call : public CallBase { public: Call(const T1 &t) : _t(t) {} R invoke(A a) { return _t(a); } private: T1 _t; }; //R (*_f)(A); //这里可用只能指针替代,这样就不用析构函数delete了 CallBase *_f; }; template<typename R, typename A> template<typename F> some_function<R(A)>::some_function(F f) :_f(new Call<F>(f)){ } template<typename R, typename A> some_function<R(A)>::~some_function() { if (_f) delete _f; } void fun(int) { std::cout << "::fun(int)" << std::endl; } struct funtor { void operator()(int) { std::cout << "funtor::operator()" << std::endl; } }; int main() { some_function<void(int)> f(fun); f(1); f = funtor(); f(2); } 输出: ::fun(int) funtor::operator() 
自己实现std::function源码:等您坐沙发呢!