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