removed comments & questions, this version is cz approved
This commit is contained in:
parent
81b4313d10
commit
e731faa381
17
Function.hpp
17
Function.hpp
@ -3,20 +3,18 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template <typename Fun> // here Fun will be a function signature
|
template <typename Fun>
|
||||||
class Function;
|
class Function;
|
||||||
|
|
||||||
// TODO: kérdezős kommentek eltüntetése leadás után
|
template <typename Ret, typename... Args>
|
||||||
template <typename Ret, typename... Args> // specialization, so we can work
|
|
||||||
class Function<Ret(Args...)>
|
class Function<Ret(Args...)>
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
class callable_base // type-erasure magic for functors
|
class callable_base
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
virtual Ret call(Args...) const = 0;
|
virtual Ret call(Args...) const = 0;
|
||||||
virtual ~callable_base() {}
|
virtual ~callable_base() = default;
|
||||||
//virtual ~callable_base() = default; // melyik számít szebbnek? van bármi különbség?
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Fun>
|
template <typename Fun>
|
||||||
@ -34,11 +32,6 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
std::unique_ptr<callable_base> _fun;
|
std::unique_ptr<callable_base> _fun;
|
||||||
/* kérdés, hogy ezt lehet-e szebben, vagy ez így a state-of-the-art megoldás?
|
|
||||||
* lent majd látod, de úgy van megoldva, hogy overloadolva van az operator=
|
|
||||||
* std::nullptr_t-re. próbáltam varázsolni ilyen std::is_null_pointer-rel,
|
|
||||||
* meg hasonlókkal a callable::operator()-ben, meg a Function::operator()-ben,
|
|
||||||
* de nem akarta az igazat. */
|
|
||||||
bool _is_null = false;
|
bool _is_null = false;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -52,7 +45,7 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Function& operator=(std::nullptr_t) // exploiting that decltype(nullptr) is std::nullptr_t
|
Function& operator=(std::nullptr_t)
|
||||||
{ _is_null = true; return *this; }
|
{ _is_null = true; return *this; }
|
||||||
|
|
||||||
Ret operator()(Args... args) const
|
Ret operator()(Args... args) const
|
||||||
|
Loading…
Reference in New Issue
Block a user