在c++中初始化查找表

Initializing a lookup table in c++

本文关键字:查找 初始化 c++      更新时间:2023-10-16

由于我似乎不能使构造函数为我的转换类静态,我试图伪造它,但它给了我一个关于未解决的外部的错误:

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;

有什么问题吗?

这里有一个简单的解决方案。

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];
}