Я разрабатываю дарвиновский симулятор эволюции. По соображениям производительности он написан на C ++. Сим представлен экземпляром World. Животные представлены экземплярами Animal, довольно сложного объекта. Мир имеет два важных метода:
animal_at(int i)
и
evolve(int n).
animal_at возвращает ненулевой необработанный указатель на экземпляр Animal, представляющий i-го животного.
evolve продвигает симуляцию, возможно , аннулируя любой указатель, возвращаемый animal_at .
Я хочу сделать сима и животных легко доступными снаружи. У меня есть привязки к Python, но я рассматриваю изучение CORBA или Ice для реализации более общего интерфейса. Проблема в том, как мне выставить животных. У меня есть две идеи, ни одна из которых не является удовлетворительной:
1) Немного переписать код, чтобы использовать shared_ptr вместо необработанного ptr и использовать промежуточное ПО, которое понимает семантику shared_ptr.
2) Создайте «глубокий ленивый прокси», который имеет ту же структуру, что и Animal. Его участники будут рекурсивными доверенными лицами членов Animal. animal_at будет фактически вызван в последний момент перед обращением к фактическим данным - указатель будет использован и немедленно отброшен. Это реализовало бы семантику "последнего момента".
Мне не нравится 1), потому что мне пришлось бы вводить состояние объекта "зомби", которое для меня выглядит не элегантным.
Мне не нравится 2), потому что единственная цель прокси-сервера - реализовать семантику «последнего момента».
Я ищу автоматический ненавязчивый способ (с использованием генерации кода) для достижения этой цели, потому что я не хочу скрывать значение исходного кода. Есть ли «официальное» название для того, что я называю «семантикой последнего момента»?