我同时使用了 Ogre 和 NxOgre,它们都有一个Real
typedef,它要么float
取决于编译器标志,要么double
取决于编译器标志。这导致我们的大多数编译器警告现在是:
warning C4305: 'argument' : truncation from 'double' to 'Ogre::Real'
例如,当使用 0.1 初始化变量时。通常我会使用 0.1f 但如果您将编译器标志更改为双精度,那么您会收到反向警告。我想最好选择一个并坚持下去,但如果可能的话,我想以一种适用于任何一种配置的方式编写这些。
一种解决方法是#pragma warning (disable : 4305)
在它发生的文件中使用,我不知道是否还有其他更复杂的问题可以通过没有此警告来隐藏。我知道我也会在头文件中推送和弹出这些内容,以免它们最终传播到代码中。
另一种是根据准确度编译器标志创建一些宏,例如:
#if OGRE_DOUBLE_PRECISION
#define INIT_REAL(x) (x)
#else
#define INIT_REAL(x) static_cast<float>( x )
#endif
这将需要更改到目前为止完成的所有变量初始化,但至少它将是未来的证明。
任何偏好或我没有想到的东西?