首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中原语的动态类型定义

C++中原语的动态类型定义
EN

Stack Overflow用户
提问于 2011-06-16 09:47:49
回答 2查看 282关注 0票数 3

我正在制作一个玩具物理引擎,它与浮点数一起工作,我称之为reals。

目前,我使用的是typedef;

代码语言:javascript
复制
typedef float real;

这是因为我可以将浮点值的精度更改为双精度或长双精度,但显然我必须重新编译。我希望能够在运行时清晰地定义real的类型,这样我就可以通过命令行或初始化GUI界面来指定精度。

我知道typedef是在编译时决定的,所以我想知道是否有人有什么好的想法。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-16 10:37:32

浮点型比双精度型占用的内存更少,精度也更低。

但是,只有一组数学库,而且它是基于双进制的。所有的浮点数都会转换为双精度浮点数,然后必须转换回浮点数。

就用替身吧。

票数 2
EN

Stack Overflow用户

发布于 2011-06-16 10:19:40

正如@Kerrek SB指出的那样,我不确定与doubles相比,使用floats有多大优势。

如果看不到你的代码,我不能肯定地说,但你也许能够用模板做你想做的事情。

代码语言:javascript
复制
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
}

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6366284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档