我有一個工作線程,它包含一個'線程操作'列表,並通過它們作爲一個工作時間。重新解釋成員函數指針是個好主意嗎?
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)
)
);
這似乎工作得很好,但我不肯定,重新詮釋一個函數指針像這樣的「定義」的行爲,可有人請指教?
重新解釋成員函數指針特別糟糕,因爲它們的大小可能因類而異:http://blogs.msdn.com/oldnewthing/archive/2004/02/09/70002.aspx – bdonlan 2009-11-03 03:56:11