【发布时间】:2013-07-11 04:50:16
【问题描述】:
我有一个类,我正试图将其实现为抽象类,以最大限度地重用代码。然而,两个派生类之间的主要共同点在于每个派生类都有一个消费者和生产者线程。我想知道是否可以让每个静态成员函数调用一个虚拟成员函数来完成所有底层工作。
基本上,是否允许以下代码,或者我是否在做一些超级 hacky 的事情,或者编译器会对我大喊大叫?
// in AbstractClass.h
class AbstractClass {
// some code here including constructors/destructors
protected:
virtual int Worker() = 0; // derived class provides implementation
private:
static void* Thread(void* args);
};
// in AbstractClass.cpp
static void* AbstractClass::Thread(void* args) {
AbstractClass myobject = static_cast<AbstractClass*>(args);
myobject->Worker();
}
基本上我想知道派生类“worker”是否会以这种方式调用?请注意,p_thread_create() 是通过传入 Thread() 函数来调用的。
感谢您的帮助,因为我试图提高对继承和虚函数的理解,以及如何使用它来最大限度地重用代码。
【问题讨论】:
-
编译器不会大喊大叫,它会看到静态转换并假设您知道自己在做什么。考虑使用类型更安全的 C++11 线程。
-
@n.m.我到了,我保证!我只是想暂时使用 p_threads,因为我想很好地掌握底层的魔法。
标签: c++ inheritance pthreads virtual