Код: Выделить всё
struct RGB { unsigned char r, g, b; }
struct BGR { unsigned char b, g, r; }
// both are packed, and have same size and alignment
Код: Выделить всё
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
Мобильная версия