在 C++ 中初始化查找表

use*_*993 2 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;
Run Code Online (Sandbox Code Playgroud)

可能是什么问题呢?

Nei*_*irk 5

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

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];
}
Run Code Online (Sandbox Code Playgroud)