避免与现代c++中某些量的平方和(或n次方根等)类型混淆

Avoiding type confusion with the square (or nth root etc) of some quantity in modern C++

本文关键字:方根 类型 c++      更新时间:2023-10-16

在介绍之后,这些关于如何用c++编程的建议立即以哲学断言"直接用代码表达思想"开始。这听起来是个不错的主意,直到我想到这个:

Speed s;                 // there will be one single value
std::vector<Mass> m;     // there may be millions/billions of values
ComputeTotalKineticEnergy();

如果有很多质量,并且正常的"半平方"物理定律适用,那么在质量矢量上(隐含的,必要的)循环外的速度平方是有意义的。但是Speed s的平方是什么类型的呢?当您想要计算对数或n次方根或类似的时候,直接在代码中表达思想的概念不会导致问题吗?在这种情况下,我们可以定义一个(丑陋的)SpeedSquared类型,但是对于应用于Speedstd::chrono::high_resolution_clock::time_point的函数同样适用的一般原则是什么?

如果您真的关心数量的强类型,请使用Boost。单元,或者编写你自己的单元库。

否则,在进行动能计算时,只需将SpeedMass的值转换为实数,然后将得到的实数转换为Energy的值,或者其他。在计算的中间阶段没有使用"合适"的类型并不是什么大问题。