我正在遍历一组回调函数。在迭代过程中调用函数,并可能导致函数集的实际容器发生剧烈变化。迭代更换容器
我现在正在做的是:
- 使原来设定
- 叠代副本的副本,但对于每一个元素检查它是否还在原来的一套
检查存在因为每个元素的存在都是超级动态的,但是看起来也很慢。
是否有其他主张来处理这种情况?
编辑:这里是实际代码:
// => i = event id
template <class Param>
void dispatchEvent(int i, Param param) {
EventReceiverSet processingNow;
const EventReceiverSet& eventReceiverSet = eventReceiverSets[i];
std::copy(eventReceiverSet.begin(), eventReceiverSet.end(), std::inserter(processingNow, processingNow.begin()));
while (!processingNow.empty()) {
EventReceiverSet::iterator it = processingNow.begin();
IFunction<>* function = it->getIFunction(); /// get function before removing iterator
processingNow.erase(it);
// is EventReceiver still valid? (may have been removed from original set)
if (eventReceiverSet.find(ERWrapper(function)) == eventReceiverSet.end()) continue; // not found
function->call(param);
}
};
通过 “设置” 你的意思是'的std ::设为<>'?如果不是,那么实际的容器类型是什么? – ildjarn 2012-02-06 19:04:10
嗯,我想离开这个泛型,但是,是的,它是一个std :: set – 2012-02-06 19:08:26