Как мне обрабатывать несколько типов данных в моем коде?
Я хочу, чтобы это было возможно для компиляции с использованием типа 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)
, заключается в том, что мне нужно выразить значение с плавающей точкой с двойной точностью в моем коде, но затем преобразовать его в (float) позже, так что я боязнь конвертации из двойного в плавающее может вызвать некоторые проблемы. Также я не уверен, что это эффективно, я слышал, что static_cast быстрее или что-то в этом роде. Но я не уверен, почему я должен использовать это и должен ли я использовать это здесь вообще.