Доступ к массиву одного типа как к массиву другого типаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Доступ к массиву одного типа как к массиву другого типа

Сообщение Anonymous »

У меня есть две структуры, содержащие данные пикселей RGB или BGR:

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

struct RGB { unsigned char r, g, b; }
struct BGR { unsigned char b, g, r; }
// both are packed, and have same size and alignment
Мне нужна функция, которая преобразует RGB в BGR в массиве пикселей:

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

BGR* convert_BGR_to_RGB(RGB*, int count);
Но для эффективности функция не должна копировать или выделять новую память.
Вместо этого она проходит через существующий массив RGB*, меняет местами первый и третий элемент в каждом пикселе (b и r), а затем возвращает указатель на тот же массив, но как BGR*.
Но это нарушит строгий псевдоним в C++.
В C++23 есть функции std::start_lifetime_as, std::destroy_n. Но есть ли способ сделать его четко определенным в C++17 или использовать расширение для конкретного компилятора (MSVC и GCC), чтобы это работало?

Подробнее здесь: https://stackoverflow.com/questions/798 ... other-type
Ответить

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

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

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

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

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