我有一个类使用看起来像这样的表格方法来计算 CRC(它是不完整的):
template<typename CrcBaseType, uint32_t Polynomial, uint32_t InitialValue, uint32_t XorOut, bool ReverseInput, bool ReverseOutput>
requires std::unsigned_integral<CrcBaseType>
class CrcDriver{
public:
CrcDriver() {};
private:
const CrcBaseType table[256];
const uint8_t size = sizeof(CrcBaseType);
private:
constexpr void genTable() {
for (uint32_t divident = 0; divident < 256; divident++) {
uint32_t curByte = divident << (8 * (size - 1));
for (uint8_t bit = 0; bit < 8; bit++) {
if ((curByte & (0x80 << (8 * (size - 1)))) != 0)
{
curByte <<= 1;
curByte ^= Polynomial;
}
else
{
curByte <<= 1;
}
}
table[divident] = curByte & (0xFFFFFFFF >> (4 - size) * 8);
}
}
constexpr void genTableR() {
Polynomial = ReverseWord(Polynomial) >> (4 - size) * 8;
for (uint32_t divident = 0; divident < 256; ++divident) {
uint32_t curByte = divident;
for (uint8_t bit = 0; bit < 8; bit++) {
if ((curByte & 0x00000001) != 0)
{
curByte >>= 1;
curByte ^= Polynomial;
}
else
{
curByte >>= 1;
}
}
table[divident] = curByte & (0xFFFFFFFF >> (4 - size) * 8);
}
}
};
我不需要在运行时重新定义它。如何在编译时使用 constexpr genTable/R 填充表?