Как обрабатывать различные параметры типа данных при компиляции? - PullRequest
0 голосов
/ 20 декабря 2011

Как мне обрабатывать несколько типов данных в моем коде?

Я хочу, чтобы это было возможно для компиляции с использованием типа 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 быстрее или что-то в этом роде. Но я не уверен, почему я должен использовать это и должен ли я использовать это здесь вообще.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2011

C ++ 11 имеет пользовательские литералы, которые можно использовать для упрощения приведения:

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

somevar *= 1.02_dt;
0 голосов
/ 20 декабря 2011

Вместо того, чтобы вставлять этот код повсюду, подумайте над тем, чтобы поместить его в заголовок, который вы можете просто включить туда, где он вам нужен.

Ваш вышеуказанный подход будет работать и является одним из нескольких подходов для достижения того, чего вы хотите.

Другие подходы могут включать использование шаблонов, которые могут немного упростить ваш код и обеспечить большую гибкость.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...