模拟实现function模板类接收不同可调用对象的功能
#include <iostream>
#include <functional>
using namespace std;
namespace myTest {
template<typename T, typename ...ARGS>
class base {
public:
virtual T run(ARGS...) = 0;
virtual base<T, ARGS...> *getCopy() = 0;
virtual ~base() {}
};
template<typename T, typename ...ARGS>
class normal_func : public base<T, ARGS...> {
public:
typedef T (*FUNC_T)(ARGS...);
normal_func(FUNC_T func) : func(func) {}
T run(ARGS ...args) override {
return func(forward<ARGS>(args)...);
}
base<T, ARGS...> *getCopy() override {
return new normal_func(func);
}
private:
FUNC_T func;
};
template<typename C, typename T, typename ...ARGS>
class object_func : public base<T, ARGS...> {
public:
object_func(C obj) : obj(obj) {}
T run(ARGS ...args) override {
return obj(forward<ARGS>(args)...);
}
base<T, ARGS...> *getCopy() overri