Возможное заполнение может стать проблемой при использовании массива структур, поскольку у вас могут возникнуть проблемы с преобразованием между ним и целями, ожидающими плотно упакованных RGB. В этом случае убедитесь, что отступы соответствуют вашим ожиданиям, например, pragma pack()
.
Что касается того, лучше ли .x или [], вы можете перегрузить operator[]
для структуры (используя переключатель в этом случае). Любой приличный компилятор оптимизирует это, чтобы быть эквивалентным static_cast<int*>(this)[index]
, так что нет потери производительности Вы можете, конечно, пойти с профсоюзом, но это не очень помогает. Другой возможностью является реализация .x () и т. Д. В терминах [].
В любом случае, я бы порекомендовал использовать структуру, так как вы ничего не теряете (вы все равно можете преобразовать массив из Color
в int*
, но вы можете писать алгоритмы проще, когда берете структуру, чем при int*
- например, если вам нужна яркость, в IMAO проще иметь красивую функцию-член / функцию, принимающую Color вместо int *, потому что с int вы никогда не сможете быть уверены, что это RGB, RGBA, YoCoCg, пока с цветом, вы можете применить это.
И последнее, но не менее важное: структура дает вам возможность инициализировать все члены в допустимые значения / sane / debug, если это необходимо.