Как добавить родительские ссылки в выражения Boost.Proto?
Я хочу генерировать деревья выражений, которые имеют "обратные" ссылки от дочернего к родительскому. Есть ли способ настроить генератор Proto или домен, чтобы класс обертки выражения (используя proto::extends<>
) содержит ссылку на родительское выражение?
Цель этого состоит в том, чтобы создать деревья выражений, которые кэшируют оцененные результаты, чтобы их можно было эффективно переоценивать. Моя стратегия состоит в том, чтобы обновить значения терминала, а затем пройтись по дереву, отмечая родительские узлы как "грязные", чтобы они были переоценены при оценке корневого выражения.
1 ответ
Техника, которую вы описываете, не может работать. Выражения строятся снизу вверх. Для выражения a + (b * c)
родительский узел (+
) не существует в то время, когда дочерний узел (b * c
) построен. Ребенок не может сохранить указатель на объект, который еще не существует.
Вы должны будете постобработать выражения, чтобы установить родительские указатели, используя преобразование или контекст.