我的情况是object
s会将事件(包含函数指针的结构,如object::do_something
)添加到其中的“事件链”(std::multimap
)中构造函数。每次游戏更新并按顺序执行每个事件时,我的解释器会读取事件链(按深度排序)。当object
被销毁时,它将自动从析构函数中删除链中的所有事件(以防止可能的事件泄漏)。
因为事件按深度排序,所以对象可能会注册链中“彼此”“下一个”的多个事件。当一个对象自行销毁时,它会取消所有事件的链接并立即停止运行它的代码共享(当某些东西被销毁时,它就无法做任何事情)。我狡猾地提出了这样做的方法;删除对象的特定函数,instance_destroy()
将抛出一个异常,我的事件解释器可以捕获并继续链中的下一个事件。
我已经意识到了;
当控制权传递回解释器(例如,通过异常)并且堆的事件已被删除,包括可能的当前迭代器时,我无法知道接下来要执行什么。我无法从一开始就启动地图 - 这会导致游戏中出现未定义的行为;事情会被执行两次。我也无法复制地图 - 它绝对是巨大的 - 它会带来巨大的性能损失。我无法重新设计系统的工作方式,因为它不是我的协议。
考虑以下数据结构;
typedef std::multimap<real_t, event> events_by_depth_t;
如果满足上述要求,我如何迭代它?
我正在使用C ++ 11。