如何在编译时处理不同的数据类型选项?

时间:2011-12-20 16:26:41

标签: c++ windows visual-c++ opengl

我应该如何在代码中处理多种数据类型的可能性?

我希望可以使用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更快或者其他东西。但我不确定为什么要使用它,我应该在这里使用它。

2 个答案:

答案 0 :(得分:0)

不要在任何地方粘贴此代码,而应考虑将其放在标题中,您可以将其包含在您需要的位置。

您的上述方法将起作用,是实现您想要的几种方法之一。

其他方法可能涉及使用模板,这些模板可以简化您的代码并提供更大的灵活性。

答案 1 :(得分:0)

C ++ 11具有用户定义的文字,可用于简化演员表:

DATATYPE operator "" _dt(long double x) {
  return x;
}

somevar *= 1.02_dt;