在c ++中初始化查找表

时间:2015-08-22 23:48:39

标签: c++

因为我似乎无法使我的转换类的构造函数变为静态,所以我尝试伪造它但它给了我一个关于未解析的外部的错误:

struct FloatConversions {
    static std::array<float, 256> ByteLUT;

    struct Initializer {
        Initializer() {
            for (double i = 0; i < 256; i++) {
                ByteLUT[i] = i / 255.0;
            }
        }
    };
    Initializer Init;

    static inline float ByteToFloat(int val) {
        return ByteLUT[val];
    }
    static inline uint8_t FloatToByte(float val) {
        return static_cast<uint8_t>(val * 255.0f);
    }
};
typedef FloatConversions FC;

可能是什么问题?

1 个答案:

答案 0 :(得分:4)

这是一个完成这项工作的简单解决方案。

float ByteToFloat(int val)
{
    static const struct FloatConversions
    {
        std::array<float, 256> ByteLUT;

        FloatConversions()
        {
            for (int i = 0; i < 256; i++)
            {
                ByteLUT[i] = i / 255.0f;
            }
        }
    } conveter;

    return conveter.ByteLUT[val];
}