diff --git a/Utility/Inc/utility_function.hpp b/Utility/Inc/utility_function.hpp index 2ea32c8..6812a8c 100644 --- a/Utility/Inc/utility_function.hpp +++ b/Utility/Inc/utility_function.hpp @@ -11,11 +11,26 @@ namespace Utility { +template +class IFunction; + +template +class IFunction +{ +public: + using result_type = R; + + virtual ~IFunction() + { } + + virtual result_type operator()(Args... args) = 0; +}; + template class Function; template -class Function +class Function : public IFunction { public: using result_type = R; @@ -29,9 +44,13 @@ public: assert(callable_); } - result_type operator()(Args&&... args) + ~Function() override { - return (*callable_)(std::forward(args)...); + } + + result_type operator()(Args... args) override + { + return (*callable_)(args...); } private: @@ -42,7 +61,7 @@ template class FunctionOwned; template -class FunctionOwned +class FunctionOwned : public IFunction { public: using source = H; @@ -57,9 +76,12 @@ public: assert(callable_); } - result_type operator()(Args&&... args) + ~FunctionOwned() override + { } + + result_type operator()(Args... args) override { - return (src_->*callable_)(std::forward(args)...); + return (src_->*callable_)(args...); } private: