「スレッド アクション」のリストを保持するワーカー スレッドがあり、それらを when として処理します。
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)
)
);
これはうまく機能しているように見えますが、このような関数ポインターの再解釈が「定義済み」の動作であるかどうかはわかりません。誰かアドバイスしてもらえますか?