История изменений
Исправление pon4ik, (текущая версия) :
Пример такого поведения - обход AST,с целью оптимизации констант. Типа превратить a * c + ((2 -1) * 3) => a * c + 3, что бы ускорить вычисления.
Очевидно, что оптимизировать можно только выражения, содержащие только константы. Тогда как вычисляются элементы такого дерева через примерно такой интерфейс:
struct Expression {
virtual double eval() = 0;
};
Но, даже тут лучше использовать ручную реализацию двойной диспетчеризации.
Исправление pon4ik, :
Пример такого поведения - обход AST,с целью оптимизации констант. Типа превратить a * c + ((2 -1) * 3) => a * c + 3, что бы ускорить вычисления.
Очевидно, что оптимизировать можно только выражения, содержащие только константы. Тогда как вычисляются элементы такого дерева через примерно такой интерфейс:
struct Expression {
virtual double eval() = 0;
};
Но, даже тут лучше использовать ручную реализацию двойной диспетчиризации.
Исходная версия pon4ik, :
Пример такого поведения - обход AST,с целью оптимизации констант. Типа превратить a * c + ((2 -1) * 3) => a * c + 3, что бы ускорить вычисления.
Очевидно, что оптимизировать можно только выражения, содержащие только константы. Тогда как вычисляются элементы такого дерева через примерно такой интерфейс:
struct Expression {
virtual double eval() = 0;
}
Но, даже тут лучше использовать ручную реализацию двойной диспетчиризации.