инициализация стандартного вектора во время компиляции - PullRequest
0 голосов
/ 28 января 2019

У меня работает следующий код, но как мне теперь инициализировать с ним вектор или переменную.

constexpr uint32_t _RtlComputeCrc32(
    _In_  DWORD dwInitial,
    _In_reads_bytes_(stLength)    const BYTE *pbyData,
    _In_  INT stLength
)
{
    ULONG crc = 0xFFFFFFFF;

    while (stLength-- != 0)
    {
        pbyData++;
      //  crc = ((crc >> 8) & 0x00FFFFFF) ^ crc32_table[(crc ^ *(pbyData++)) & 0x000000FF];
    }
    return crc ^ 0xFFFFFFFF;
}

constexpr uint32_t crccalc(const std::wstring_view field)
{
    return _RtlComputeCrc32(0, (BYTE*)field.data(), (INT)field.size() * sizeof(wchar_t));
}

template<const wchar_t* T >
struct crcfield
{
    //static constexpr const std::wstring_view  sname = T;
    static constexpr const uint32_t field = crccalc(T);
};

struct Field
{
    std::wstring_view namee;
    static const uint32_t crcfield;
};

Если мне нужна статическая переменная, как это должно выглядеть:

static constexpr const wchar_t *namee = _T("test");

auto f = crcfield**<???>;**

Если я, например, сделаю следующее:

 auto f = crcfield<_T("t")>;

Я получу ошибку:

 error C2762: 'crcfield': invalid expression as a template argument for 'T'
...