Как переинтерпретировать значение как байты в контексте времени компиляции в 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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