Как переинтерпретировать значение как байты в контексте времени компиляции в C++C++

Программы на C++. Форум разработчиков
Anonymous
Как переинтерпретировать значение как байты в контексте времени компиляции в C++

Сообщение Anonymous »

Я пытаюсь реализовать хэш-функцию, которую можно использовать во время компиляции. Чтобы добиться этого, мне нужно переинтерпретировать значение (например, int или float) как его необработанные байты.

Однако при использовании оценки во время компиляции указатель игра слов (переинтерпретация) типов не допускается из-за строгих псевдонимов и других ограничений.
Вот упрощенный пример, иллюстрирующий проблему:

Код: Выделить всё

template 
constexpr size_t hash(const T& value) {
const unsigned char* byte_ptr = reinterpret_cast(&value); // NOT allowed.

size_t hash = 0;
for (size_t i = 0; i < sizeof(T); ++i) {
hash ^= byte_ptr[i];
}
return hash;
}
Существует ли соответствующий стандарту способ интерпретировать значение как байты в контексте constexpr?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ntext-in-c

Вернуться в «C++»