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