最近我一直在设计一个 Thread 类库,我做了一个 Thread 抽象类,如下所示:
class Thread {
public:
run() { /*start the thread*/ }
kill() { /*stop the thread*/ }
protected:
virtual int doOperation(unsigned int, void *) = 0;
};
真正的线程类会继承这个抽象类并doOperation
以自己的逻辑实现方法,类似于Strategy Pattern。
问题是我依赖于一个 C 后端库,它定义了在以下函数中运行线程:
int startThread(char* name, (int)(*)(unsigned int, void*), int, int, int, void*);
如你看到的; 第二个参数是一个指向线程循环(主函数)的函数指针,这就是问题所在;由于我使用这个 C 函数在run
方法中启动线程,所以我将地址传递doOperation
给第二个参数,但由于类型不匹配,这无法完成。
我尝试使用reinterpret_cast
返回指针,但我 ISO-C++ 禁止返回未初始化函数成员的指针。我不知道如何克服这个冲突,我猜使用静态方法是唯一的解决方案,但这会破坏我的设计模式!