OdysseyDecomp/lib/al/Library/Thread/FunctorV0M.h
2024-07-09 21:48:16 +02:00

31 lines
802 B
C++

#pragma once
namespace al {
class FunctorBase {
public:
inline FunctorBase() = default;
inline FunctorBase(const FunctorBase& copy) = default;
virtual void operator()() const = 0;
virtual FunctorBase* clone() const = 0;
virtual ~FunctorBase() {}
};
template <class T, class F>
class FunctorV0M : public FunctorBase {
public:
inline FunctorV0M() = default;
inline FunctorV0M(T objPointer, F functPointer)
: mObjPointer(objPointer), mFunctor(functPointer){};
inline FunctorV0M(const FunctorV0M<T, F>& copy) = default;
void operator()() const override { (mObjPointer->*mFunctor)(); }
FunctorV0M<T, F>* clone() const override { return new FunctorV0M<T, F>(*this); }
private:
T mObjPointer = nullptr;
F mFunctor = nullptr;
};
} // namespace al