mirror of
https://github.com/encounter/Petari.git
synced 2026-03-30 11:34:15 -07:00
44 lines
1013 B
C++
44 lines
1013 B
C++
#pragma once
|
|
|
|
#include "Inline.hpp"
|
|
#include <JSystem/JKernel/JKRHeap.hpp>
|
|
|
|
class TalkMessageFuncBase {
|
|
public:
|
|
virtual void operator()() const = 0;
|
|
virtual TalkMessageFuncBase* clone() const = 0;
|
|
virtual TalkMessageFuncBase* clone(JKRHeap *) const = 0;
|
|
};
|
|
|
|
template<typename T, typename U>
|
|
class TalkMessageFuncM : public TalkMessageFuncBase {
|
|
public:
|
|
|
|
inline TalkMessageFuncM(T call, U callee)
|
|
: mCaller(call), mCallee(callee) {
|
|
}
|
|
|
|
inline TalkMessageFuncM() {
|
|
|
|
}
|
|
|
|
virtual void operator()() const {
|
|
(mCaller->*mCallee)();
|
|
}
|
|
|
|
virtual TalkMessageFuncM* clone() const {
|
|
return new TalkMessageFuncM(*this);
|
|
}
|
|
|
|
virtual TalkMessageFuncM* clone(JKRHeap *pHeap) const {
|
|
return new (pHeap, 0) TalkMessageFuncM(*this);
|
|
};
|
|
|
|
T mCaller;
|
|
U mCallee;
|
|
};
|
|
|
|
template<class T>
|
|
static TalkMessageFuncM<T *, void (T::*)()> TalkMessageFunc(T* a1, void (T::*a2)()) NO_INLINE {
|
|
return TalkMessageFuncM<T *, void (T::*)()>(a1, a2);
|
|
} |