Доступ к массиву одного типа как к массиву или другому типу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

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