I have an approach to calling a function with a delay for a class:
typedef void (MyClass::*IntFunc) (int value);
void DelayedFunction (IntFunc func, int value, float time);
class TFunctorInt
{
public:
TFunctorInt (MyClass* o, IntFunc f, int v) : obj (o), func (f), value (v) {}
virtual void operator()();
protected:
MyClass* obj;
IntFunc func;
int value;
};
void MyClass::DelayedFunction (IntFunc func, int value, float time)
{
TFunctorBase* functor = new TFunctorInt (this, func, value);
DelayedFunctions.push_back (TDelayedFunction (functor, time));
}
void MyClass::TFunctorInt::operator()()
{
((*obj).*(func)) (value);
}
I want to make a template functor. And the first problem is that:
template <typename T>
typedef void (MyClass::*TFunc<T>) (T param);
Causes a compiler error: βtypedef template declaration.β What could be the solution?
PS: code based on http://www.coffeedev.net/c++-faq-lite/en/pointers-to-members.html#faq-33.5
source
share