然而,如果我们试图写:
quantity<float,force> f = m*a;
我们会遇到一点问题。尽管m*a的结果的确表示:质量,长度,时间的指数分别为1,1,-2,然而transform返回的类型却并非vector_c。相反,transform处理它的输入元素,并以恰当的元素创建一个新的序列:这个新序列和mpl::vector_c<int,1,1,-2,0,0,0,0>具有几乎相同的属性,但它们却是完全不同的c++类型。如果你想要知道新序列的全名,你可以尝试编译这个例子,然后查看错误信息,但是确切的细节并不重要。关键的问题是force的类型和新序列的类型不同,所以赋值会失败。
为了解决这个问题,我们可以添加一个从乘法的结果类型到quantity<float,force>的隐式转换。由于我们无法预测介入计算的单位的确切类型(从而也就无法预测计算的结果的单位——译注),所以这个转换必须为模板形式的,像这样: