我正在用C++编写一个游戏和一个附带的引擎。引擎在很大程度上依赖于使用简单的嵌入式脚本语言的自动化。脚本可以创建对象类,在其上定义事件侦听器,并从中生成实例。目前,一个实例必须绑定到脚本全局标识符才能保持其存在。这样做的明显结果是,不可能有匿名对象,这将是迄今为止最常见的。
目前,使用
std::set<Instance*, spatial_sort>
在哪里
spatial_sort
是按位置对实例排序的函子,用于渲染和碰撞检测。在假设实例不可能在五十分之一秒内移动整个帧的情况下,将实例移除并使用其当前位置作为提示重新插入每个帧。如果A
dead
在实例中设置标志,它将从集合中删除。这个
Instance
构造函数和析构函数调用
insert(this)
和
erase(this)
,分别是。
为了允许匿名实例,我想将集合更改为
std::set<boost::shared_ptr<Instance>, spatial_sort>
,这将允许
实例
分享实例的所有权并保存它们的存在直到它们毁灭自己。不幸的是,因为
insert()
需要放在构造函数中,
shared_from_this()
不适用于获得
shared_ptr
到
实例
. 这一点都不重要
实例
碰巧已经继承了
boost::enable_shared_from_this<>
通过它的基类。
有人能推荐一个合适的解决方法吗?
编辑:
我做了我本来应该做的事,把
实例
分为两类:
实例
和
Reference
. 表达
new SomeClass
在脚本中,然后返回
参考文献
新的
实例
. 这个
实例
对象本身从不使用
SelddPPTR
,因此他们负责在适当的事件(如动画结束、级别结束等)下自杀。
谢谢你的帮助!重构是一个很好的解决方案,如果它只是工作的话。