小编Pav*_*ant的帖子

暴露复杂短期对象的正确方法

我正在开发达尔文进化模拟.出于性能原因,它是用C++编写的.sim由一个World实例表示.动物由动物实例代表,动物是一个相当复杂的物体.世界有两个重要方法:

animal_at(int i) 
Run Code Online (Sandbox Code Playgroud)

evolve(int n). 
Run Code Online (Sandbox Code Playgroud)

animal_at返回一个非null的原始指针,指向表示第i个动物的Animal实例.
evolve推进了模拟可能使animal_at返回的任何指针无效.我想从外面轻松访问sim和动物.我有特定于python的绑定,但我正在考虑学习CORBA或Ice来实现更通用的接口.问题是我应该如何暴露动物.我有两个想法,其中没有一个令人满意:1)稍微重写代码以使用shared_ptr而不是原始ptr并使用理解shared_ptr语义的中间件.2)生成一个"深度惰性代理",其结构与Animal相同.其成员将以递归方式代表Animal的成员.在引用实际数据之前,实际上会在最后一刻调用animal_at - 指针将被使用并立即被抛弃.这将实现"最后时刻"语义.

我不喜欢1)因为我必须引入一个对象的"僵尸"状态,这对我来说看起来不优雅.我不喜欢2)因为代理的唯一目的是实现"最后时刻"语义.

我正在寻找一种自动的非侵入式方式(使用代码生成)来实现这一点,因为我不想掩盖原始代码的含义.对于我称之为"最后时刻"的语义,是否有任何"官方"名称?

c++ binding pointers

7
推荐指数
1
解决办法
298
查看次数

标签 统计

binding ×1

c++ ×1

pointers ×1