Compare commits
1 Commits
9bf60d7e4e
...
b8a6cf0de0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b8a6cf0de0 |
@ -11,11 +11,26 @@
|
||||
namespace Utility
|
||||
{
|
||||
|
||||
template<class>
|
||||
class IFunction;
|
||||
|
||||
template<typename R, typename... Args>
|
||||
class IFunction<R(Args...)>
|
||||
{
|
||||
public:
|
||||
using result_type = R;
|
||||
|
||||
virtual ~IFunction()
|
||||
{}
|
||||
|
||||
virtual result_type operator()(Args... args) = 0;
|
||||
};
|
||||
|
||||
template<class>
|
||||
class Function;
|
||||
|
||||
template<typename R, typename... Args>
|
||||
class Function<R(Args...)>
|
||||
class Function<R(Args...)> : public IFunction<R(Args...)>
|
||||
{
|
||||
public:
|
||||
using result_type = R;
|
||||
@ -29,9 +44,13 @@ public:
|
||||
assert(callable_);
|
||||
}
|
||||
|
||||
result_type operator()(Args&&... args)
|
||||
~Function() override
|
||||
{
|
||||
return (*callable_)(std::forward<Args>(args)...);
|
||||
}
|
||||
|
||||
result_type operator()(Args... args) override
|
||||
{
|
||||
return (*callable_)(args...);
|
||||
}
|
||||
|
||||
private:
|
||||
@ -42,7 +61,7 @@ template<class, class>
|
||||
class FunctionOwned;
|
||||
|
||||
template<typename H, typename R, typename... Args>
|
||||
class FunctionOwned<H, R(Args...)>
|
||||
class FunctionOwned<H, R(Args...)> : public IFunction<R(Args...)>
|
||||
{
|
||||
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>(args)...);
|
||||
return (src_->*callable_)(args...);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user