2016-11-27 12:55:32 +00:00
|
|
|
template <typename Fun>
|
|
|
|
class Function;
|
|
|
|
|
|
|
|
|
|
|
|
template <typename Ret, typename... Args>
|
|
|
|
class function
|
|
|
|
{
|
2016-11-27 13:00:34 +00:00
|
|
|
private:
|
|
|
|
class callable_base
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
virtual Ret call(Args...) = 0;
|
|
|
|
};
|
2016-11-27 13:02:28 +00:00
|
|
|
|
|
|
|
template <typename Fun>
|
|
|
|
class callable : public callable_base
|
|
|
|
{
|
|
|
|
private:
|
|
|
|
Fun _f;
|
|
|
|
public:
|
|
|
|
callable(Fun f):_f(f) {}
|
|
|
|
virtual Ret call(Args... args)
|
|
|
|
{ return _f(std::forward<Args>(args)...); }
|
|
|
|
};
|
2016-11-27 13:00:34 +00:00
|
|
|
public:
|
2016-11-27 12:55:32 +00:00
|
|
|
};
|