C ++中基元的动态typedef

时间:2011-06-16 01:47:49

标签: c++ physics typedef

我正在制作一个玩具物理引擎,它可以使用我称之为实数的浮点数。

目前,我正在使用typedef;

typedef float real;

这样我可以将浮点值的精度更改为double或long double,但显然我必须重新编译。我希望能够在运行时干净地定义真实的类型,以便我可以通过命令行或初始化GUI界面指定精度。

我知道typedef是在编译时确定的,所以我想知道是否有人有任何干净的想法。

2 个答案:

答案 0 :(得分:2)

正如@Kerrek SB指出的那样,我不确定在float s上使用double会有多大优势。

我不能在没有看到你的代码的情况下明确地说出来,但你可以用模板做你想做的事。

template <typename T>
T Crunch1(T rhs)
{
    // do something with 'rhs' and return the result
}
template <typename T>
T Crunch2(T lhs, T rhs)
{
    // do something with 'lhs' & 'rhs' and return the result
}

这仍然是编译时而不是运行时多态,但可能是最接近你想要的东西。

并且,您可以创建一系列插件(每个所需精度一个插件)并在运行时按照您的建议选择。每个插件都是特定精度的模板代码的实例化。模板和插件架构的组合将为您提供所需的灵活性,而不会出现您显然要避免的代码重复。

答案 1 :(得分:2)

浮点数使用的内存少于双精度,而且精度较低。

但是,只有一组数学库,它是基于双重的。所有浮点数都会转换为double用于计算,然后必须转换为浮动。

只需使用双打。