#ifndef _INC_FUNCTION_HPP__ #define _INC_FUNCTION_HPP__ #include namespace NewOS { template class Function final { public: Function() = default; public: explicit Function(T (*Fn)(Args... args)) : fFn(Fn) {} ~Function() = default; Function &operator=(const Function &) = default; Function(const Function &) = default; template T operator()(Args... args) { return fFn(args...); } template T Call(Args... args) { return fFn(args...); } operator bool() { return fFn; } bool operator!() { return !fFn; } private: T (*fFn)(Args... args); }; } // namespace NewOS #endif // !_INC_FUNCTION_HPP__