我有一个工作线程,它包含一个“线程操作”列表,并作为时间处理它们。
template <class T> class ThreadAction
{
public:
typedef void (T::*action)();
ThreadAction(T* t, action f) :
func(f),obj(t) {}
void operator()() { (obj->*func)(); }
void (T::*func)();
T* obj;
};
通常是这样称呼的
myActionThread->addAction(
new ThreadAction<TheirClass>(this, &TheirClass::enable)
);
哪个工作得很好,直到
void TheirClass::enable()
改为
bool TheirClass::enable()
遗憾的是,我们无法再次将其更改回来,因为其他内容需要新格式(并且重载不能仅因返回类型而异)。
我确实尝试过
myActionThread->addAction(
new ThreadAction<TheirClass>(this,
reinterpret_cast<void(TheirClass::*)>(&TheirClass::enable)
)
);
这似乎工作得很好,但我不确定重新解释这样的函数指针是“定义”的行为,有人可以建议吗?