Я использую библиотеку STB для загрузки изображений в память. Специальная функция, stbi_load
, возвращает указатель на unsigned char
, который является массивом.
Я испытываю желание использовать новый API C ++ 17 для необработанных данных, std::byte
, который позволил бы мне быть более выразительным и позволил мне псевдоним необработанных данных попиксельно, или цвет за цветом, приведя его к другому типу данных (целые числа разного размера).
Теперь я попробовал это:
std::unique_ptr<std::byte[], stbi_deleter>(stbi_load(...));
Конечно, это не сработало из-за отсутствия неявного преобразования.
Тогда я попробовал это:
std::unique_ptr<std::byte[], stbi_deleter>(
static_cast<std::byte*>(stbi_load(...))
);
Опять же, это все еще не сработало. Я должен был решить использовать reinterpret_cast
вместо этого. И заставил меня задаться вопросом, является ли это преобразование законным или нет. Могу ли я законно преобразовать unsigned char*
в std::byte*
в соответствии со строгим правилом алиасинга ? И затем я могу привести данные к другому типу данных, например std::uint32_t*
, и изменить его? Это также нарушит правило наложения имен?