в метапрограммировании шаблонов C ++: концепции, инструменты и методы от Boost и не только
... Одним из недостатков шаблонов выражений является то, что они склонны поощрять написание больших и сложных выражений, потому что вычисление откладывается только до вызова оператора присваивания. Если программист хочет повторно использовать какой-либо промежуточный результат без его ранней оценки, он может быть вынужден объявить сложный тип, например:
Expression<
Expression<Array,plus,Array>,
plus,
Expression<Array,minus,Array>
> intermediate = a + b + (c - d);
(или хуже). Обратите внимание, как этот тип не только точно и избыточно отражает структуру вычислений, и поэтому его необходимо поддерживать при изменении формулы, но и подавлять ее? Это давняя проблема для C ++ DSEL. Обычный обходной путь - захват выражения с помощью стирания типа, но в этом случае нужно платить за динамическую отправку. В последнее время было много дискуссий, возглавляемых самим Бьярном Страуструпом, о повторном использовании ключевого слова vestigial auto для вывода типа в объявлениях переменных, так что приведенное выше можно переписать как:
auto intermediate = a + b + (c - d);
Эта функция будет огромным преимуществом как для авторов C ++ DSEL, так и для пользователей ...
Возможно ли решить эту проблему с текущим c ++ std. (не C ++ 0X)
Например, я хочу написать выражение вроде:
Выражение X, Y
Матрица A, B, C, D
X=A+B+C
Y=X+C
D:=X+Y
Оператор where: = вычислить выражение не позднее времени.
auto
, а затем спрашиваете, можно ли ее решить на C ++ 0x? - person jalf   schedule 03.11.2009