我能想到的最好的方法是,如果您需要为不同的客户编译不同版本的程序,那么TMP可能会为您节省一些时间。但这是否真的需要每一个?
答案 0 :(得分:6)
当涉及到矩阵运算时,TMP的主要优点不是预先计算矩阵运算结果的能力,而是能够优化生成的代码以便在运行时进行实际的矩阵计算。你是对的 - 你不太可能想要在程序中预先计算矩阵 - 但是想要在程序开始运行之前在编译时优化矩阵数学是三文鱼。例如,请考虑以下代码:
Matrix a, b, c;
/* ... Initialize these matrices ... */
Matrix d = a + b + c;
最后一行使用一些重载运算符来计算矩阵表达式。使用传统的C ++编程技术,这将工作如下:
这很慢 - 没有充分的理由在这里制作任何值的副本。相反,我们应该只是循环遍历矩阵中的所有索引,并总结我们找到的所有值。但是,使用名为expression templates的TMP技术,可以以一种实际以智能,优化的方式而不是缓慢的标准方式进行此计算的方式来实现这些运算符。这是我认为迈耶斯在书中提到的这一系列技术。
最着名的TMP示例是在编译时预先计算值的简单程序,但在实践中,这些实际上在实践中使用的复杂技术要复杂得多。