Как до Я пытаюсь «эмулировать» параметры шаблона float на основе его записи IEEE754 благодаря reinterpret_cast. Я использую компилятор MSVC 2005 (он не поддерживает С++ 11).
Вот код:
#include <iostream>
#ifdef _MSC_VER
typedef unsigned __int32 uint32_t;
#else
# include <stdint.h>
#endif
template <uint32_t T>
union Other
{
static const uint32_t i = T;
static const float x;
};
template <uint32_t T>
const float Other<T>::x = reinterpret_cast<const float&>(Other<T>::i);
union Test
{
static const float x;
static const uint32_t i;
};
const float Test::x = 3.141592f;
const uint32_t Test::i = reinterpret_cast<const uint32_t&>(Test::x);
int main()
{
std::cout << Other<0x40490fdb>::x << std::endl; //works
std::cout << Other<Test::i>::x << std::endl; //doesn't compile
return 0;
}
Как видите, я не могу заставить ieee754 писать число с плавающей запятой во время компиляции. Он компилируется другим компилятором? Если нет, то почему? Можно ли добиться этого преобразования во время компиляции без С++ 11?
union
во время компиляции? Не могли бы вы объяснить, почему вы этого хотите (особенно требование времени компиляции)? (Возможно, вы захотите прочитать о проблеме XY.) - person Some programmer dude   schedule 08.04.2014MyStruct<314159265359, 100000000000>
... теперь это просто для удовольствия. ;-) - person matovitch   schedule 08.04.2014