Я пытаюсь написать простой цветовой класс, который должен быть максимально универсальным. Вот как это выглядит:
class MyColor {
private:
uint8 v[4];
public:
uint8 &r, &g, &b, &a;
MyColor() : r(v[0]), g(v[1]), b(v[2]), a(v[3]) {}
MyColor(uint8 red, uint8 green, uint8 blue, uint8 alpha = 255) : r(v[0]), g(v[1]), b(v[2]), a(v[3]) {
printf("%d, %d, %d, %d\n", red, green, blue, alpha);
r = red;
g = green;
b = blue;
a = alpha;
}
MyColor(uint8 vec[]) : r(v[0]), g(v[1]), b(v[2]), a(v[3]) {
MyColor(vec[0], vec[1], vec[2], vec[3]);
}
uint8 operator [](int i) {
return v[i];
}
operator const GLubyte*() {
return v;
}
};
А вот код, который я пытаюсь:
uint8 tmp[] = {1,2,3,4};
MyColor c(tmp);
printf("%d, %d, %d, %d\n", c.r, c.g, c.b, c.a);
(Мне бы понравилось, если бы я мог сделать MyColor c = {1,2,3,4}
, но я не уверен, что это возможно в текущей спецификации?)
Во всяком случае, это выводит это:
1, 2, 3, 4
112, 22, 104, 89
Значит, значения, которые он получает во втором конструкторе, верны, но когда он возвращает ... эти значения случайные ??
r = red
должен установить r
и v[0]
на red
не так ли? Поскольку r
является просто ссылкой на v[0]
, они на самом деле имеют одинаковое значение, нет? Я не делаю какой-то странной переназначения ссылки где-нибудь в космосе, не так ли?