我有一个类来控制所有的IO来自/来自设备。当线程发出IO请求时,它将被添加到FIFO队列中,以防当时处理另一个IO请求。只要IO请求完成,它就会从队列中弹出,并处理下一个IO请求。公共结构继承私有结构C++
留出多余的功能,成员变量,并构建函数/ dtors,我类布局像这样:
class IOInterface
{
public:
struct ReadRequest: public IORequest
{
ReadRequest(int a, int b)
: IORequest(a, b) {}
};
struct WriteRequest: public IORequest
{
WriteRequest(int a, int b)
: IORequest(a, b) {}
};
void makeIORequest(IORequest request);
protected:
void performIO(ReadRequest request);
void performIO(WriteRequest request);
std::queue<IORequest> m_ioQueue;
private:
struct IORequest
{
IORequest(int a, int b)
: m_a(a), m_b(b) {}
int m_a;
int m_b;
}
}
(这不是我的代码完全相同的副本,所以我不认为它会编译为是)
的想法是能够有一个线程,如果队列有一个要求,即会检查,然后只需拨打:
performIO(m_ioQueue.front());
的问题是,在编译时可以编译呃不知道什么是IORequest,当它到达ReadRequest和WriteRequest。我不能将类的私有部分移动到顶端,因为重载的performIO函数不知道ReadRequest和WriteRequest是什么。
我想让IORequest保持私有状态,以便在此IOInterface类继承时永远不会实例化。
通常情况下,这可以通过前向声明来解决,但是如何在保持私有性的同时转发声明IORequest?
正向声明是否正确地执行此操作?