我应该如何在代码中处理多种数据类型的可能性?
我希望可以使用double或float类型进行编译,这是我目前使用的代码:
#define USE_FLOAT_PRECISION
...
#ifdef USE_FLOAT_PRECISION
typedef float DATATYPE;
#define GL_DATATYPE GL_FLOAT
#else
typedef double DATATYPE;
#define GL_DATATYPE GL_DOUBLE
#endif
...
DATATYPE somevar;
...
for(...){
for(...){
...
somevar *= (DATATYPE)1.02; // is this good?
...
}
}
...
glVertexPointer(3, GL_DATATYPE, ... // can this be done better?
...
这个工作得很好,但是我觉得有一些不好的东西(DATATYPE)用于我使用它的每一个地方,也看起来很难看,粘贴到每个地方都很烦人。还有其他解决办法吗?
编辑:我担心转换到(DATATYPE)
的原因是因为我需要在我的代码中用双精度表示浮点值,但之后将其转换为(浮点) ,所以我担心从双重转换为浮动会导致一些问题。我也不确定它是否有效,我听说static_cast更快或者其他东西。但我不确定为什么要使用它,我应该在这里使用它。
答案 0 :(得分:0)
不要在任何地方粘贴此代码,而应考虑将其放在标题中,您可以将其包含在您需要的位置。
您的上述方法将起作用,是实现您想要的几种方法之一。
其他方法可能涉及使用模板,这些模板可以简化您的代码并提供更大的灵活性。
答案 1 :(得分:0)
C ++ 11具有用户定义的文字,可用于简化演员表:
DATATYPE operator "" _dt(long double x) {
return x;
}
somevar *= 1.02_dt;