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

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

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

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

虽然这行得通,但存在另一个程序员(或我)可能会忘记在对象排队时发出信号量的风险;我希望强制执行此操作。

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

但是这个功能看起来非常有用并且非常受欢迎,所以我敢打赌有人已经写了这个,可能比我在这里提出的设计更好,并且解决了诸如重入之类的繁琐细节。是否存在这方面的图书馆?或者,是否有获得此功能的众所周知的技术?

最佳答案

为此我使用了私有(private)继承,以及 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) { ... }
};

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

关于c++ - 用于组合容器和自定义逻辑的 C++ 技术/库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13094853/

相关文章:

c++ - 为什么我在 C++ 中的 for 循环没有像预期的那样迭代多次?

python - 为 Python 3.5 构建 Fortran 扩展或为 2.7 构建 C 扩展

c++ - 在这个 boost::asio 应用程序示例中,如何使用 send_break 进行重置?

c++ - 在2D vector 上使用STL算法提取第一列

c++ - 我是否以正确的方式插入到 STL map 中?它不会泄漏内存吗?

c++ - 如果相等则将 unsigned 中的所有位设置为 1,否则设置为 0

包含唯一指针成员变量的类的 C++ 赋值运算符

c++ - 如何将数组的内容插入 vector 中?

c++ - boost::process 如何知道进程何时退出 "gracefully or not"?

c++ - 生成和复制 vector 的 STL 算法