私は可能な限り多目的であるはずの単純なカラークラスを作成しようとしています。参照が正しく割り当てられていないコンストラクタ?
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:現在の仕様)とにかく
は、それがこの出力します2番目のコンストラクタに収まるのは正しいですが、それが返ってくると...それらの値はランダムですか?
r = red
は、r
とv[0]
~red
の両方を設定してください。 r
はちょうどv[0]
への参照なので、実際には同じ値を共有していますか?私は宇宙のどこかへの参照のいくつかの変わった再割り当てをやっていませんか?
ああ! *それは何をしているのか。私はそれを拾うべきだったと思う。コンストラクターフォワーディングもできません。これはC++のかなり愚かな制限のように思えます。 – mpen
ほとんどのもの(私の更新を見てください)のメンバ関数に機能を分けることができるので、コンストラクタの転送は、複数のコンストラクタのイニシャライザリストで複雑な式を共有する場合に大きなメリットです。私は実際にこの機能を1〜2回見逃してしまいました。これはC++の新しいバージョンになります。 –
ああ..とにかくやってしまったのですが、とにかくセット機能が必要だったからです。二重目的:) – mpen