用于组合容器和自定义逻辑的C ++技术/库?

时间:2012-10-26 21:43:55

标签: c++ boost stl policy-based-design

我需要偶尔处理一个延迟的对象。但是,持有该对象的线程不能延迟。

一个自然的解决方案是让一个单独的线程等待这些对象。当一个对象变得可用时,该第二个线程将根据需要延迟并处理该对象。第二个线程将睡在信号量上。当主线程有一个延迟处理的对象时,它会将对象放入队列并发出信号信号。

虽然这可行,但是有一个风险,即另一个程序员(或我)在排队对象时可能忘记发信号通知信号;我希望这一点得到执行。

所以,我可能会创建自己的容器,它基于一个标准容器,但增加了一个回调(可能使用基于策略的设计)和一个内部信号量。当项目被添加到容器时,它将强制运行回调函数。

但是这个功能看起来非常有用并且非常普遍,我敢打赌,有人已经写过这个,可能有比我在这里提出的设计更好的设计,并且解决了诸如重入之类的毛茸茸的细节。这个库是否存在?或者,是否有一种众所周知的获取此功能的技术?

1 个答案:

答案 0 :(得分:0)

我已经使用了私有继承以及using声明:

struct myVec : private std::vector<int> {
 // Stuff that works the same
 using std::vector<int>::push_back;
 using std::vector<int>::erase;
 using std::vector<int>::iterator;

 // Stuff that works differently:
 void erase(std::vector<int>::iterator it) { ... }
};

重要的是不要使用标准容器的公共继承。 最终编写与切片和非虚拟析构函数相关的错误。