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

Posted

技术标签:

【中文标题】用于组合容器和自定义逻辑的 C++ 技术/库?【英文标题】:A C++ technique/library for combining a container and custom logic? 【发布时间】:2012-10-26 21:43:54 【问题描述】:

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

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

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

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

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

【问题讨论】:

如果您自己编写,请注意您不必从头开始编写。你可以写一个容器,只管理一个内部的std::vector 什么的。 当然。 :) 谢谢。 【参考方案1】:

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

不要使用来自标准容器的公共继承,这一点很重要。您最终编写与切片和非虚拟析构函数相关的错误。

【讨论】:

以上是关于用于组合容器和自定义逻辑的 C++ 技术/库?的主要内容,如果未能解决你的问题,请参考以下文章

DTO中的继承和自定义逻辑[关闭]

用于库/应用程序组合的 C++ 中的错误处理/错误日志记录

自定义容器和自定义转换

第十六天 自定义控件和自定义组合控件

C++ 支持向量机 (SVM) 模板库?

颜色组合框和自定义颜色选择器