在 C++ 模板元编程中:来自 Boost 和 Beyond 的概念、工具和技术
...表达式模板的一个缺点是它们倾向于鼓励编写大而复杂的表达式,因为评估只会延迟到调用赋值运算符。如果程序员想要重用一些中间结果而不提前评估它,她可能会被迫声明一个复杂的类型,例如:
Expression<
Expression<Array,plus,Array>,
plus,
Expression<Array,minus,Array>
> intermediate = a + b + (c - d);
(或更糟)。请注意,这种类型不仅准确且冗余地反映了计算的结构,因此需要在公式更改时进行维护,而且还压倒了它?这是 C++ DSEL 长期存在的问题。通常的解决方法是使用类型擦除来捕获表达式,但在这种情况下,需要为动态调度付费。最近有很多讨论,由 Bjarne Stroustrup 本人带头,关于重用残留的 auto 关键字在变量声明中进行类型推导,以便将上述内容重写为:
auto intermediate = a + b + (c - d);
这个特性对于 C++ DSEL 作者和用户来说将是一个巨大的优势......
是否有可能用当前的 c++ std. (非 C++0X)
例如,我想写一个表达式,如:
Expr X,Y
矩阵 A、B、C、D
X=A+B+C
Y=X+C
D:=X+Y
where operator := 在最迟时间计算表达式。