가능한 한 다재다능한 간단한 색상 클래스를 작성하려고합니다.참조가 제대로 지정되지 않은 생성자?
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
그래서 값 I : 전류 사양) 어쨌든
는,이 출력 t는 2 번째 생성자를 얻는다. 그러나 반환 할 때 ... 그 값은 무작위인가?
r = red
은 모두 r
과 v[0]
에서 red
으로 설정해야합니다. r
은 v[0]
에 대한 참조 일 뿐이므로 실제로 동일한 값을 공유합니까? 우주에서 어딘가에 대한 참조의 이상한 재 할당을하고 있지 않을까요?
오! * 그것이하는 일입니다. 내가 그걸 알아봐야 할 것 같아. 우리는 심지어 생성자 전달을 할 수 없습니까? C++의 꽤 멍청한 한계처럼 보입니다. – mpen
대부분의 경우 멤버 함수로 기능을 구분할 수 있으므로 (내 업데이트 참조) 생성자 전달은 여러 생성자의 이니셜 라이저 목록에서 복잡한 표현식을 공유 할 때 큰 이점입니다. 필자는이 기능을 한번 또는 두번 놓쳤으며 곧 출시 될 C++의 새로운 버전에 포함될 것입니다. –
아 .. 그게 어쨌든 나는 결국 끝났지 만 어쨌든 세트 기능이 필요했기 때문입니다. 이중 목적 : – mpen