我有一个方法调用延迟功能类:模板函数指针
//in MyClass declaration:
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;
};
//in MyClass.cpp file:
void MyClass::DelayedFunction (IntFunc func, int value, float time)
{
TFunctorBase* functor = new TFunctorInt (this, func, value);
DelayedFunctions.push_back (TDelayedFunction (functor, time)); // will be called in future
}
void MyClass::TFunctorInt::operator()()
{
((*obj).*(func)) (value);
}
我想使模板仿函数。第一个问题是:
template <typename T>
typedef void (MyClass::*TFunc<T>) (T param);
导致编译器错误:“typedef'的模板声明”。 什么可能是一个解决方案?
PS:基于http://www.coffeedev.net/c++-faq-lite/en/pointers-to-members.html#faq-33.5
可能的重复[替代模板声明的typedef](http://stackoverflow.com/questions/3708593/alternative-to-template-declaration-of-typedef) – kennytm 2010-09-16 14:54:37
纠正我,如果我错了(这个语法((* obj)。*(func))(value)'拼写成'obj - > * func(value)''代替? – sbi 2010-09-16 14:55:48
@sbi:'(obj - > * func)(value)'确切地说。 – 2010-09-16 14:57:17