传递float作为模板参数(bis)

时间:2014-04-08 09:11:41

标签: c++ templates floating-point reinterpret-cast

作为before由于reinterpret_cast,我试图基于其IEEE754 wrinting“emule”浮动模板参数。我正在使用MSVC 2005编译器(它不支持c ++ 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写一个浮点数。它是否与另一个编译器编译?如果不是为什么?是否有可能在没有c ++ 11的情况下在编译时实现这种转换?

0 个答案:

没有答案