ベクトルと色の間に共通のふるまいがある場合を除き、これは悪い考えです。しかし、あなたが尋ねてきたので、ここでそれを行う方法があります。
x、y、z、wメンバーを非公開にして、それらにアクセスするためのアクセサーメソッドを提供すると、同じメンバ変数を参照する2つの代替方法を提供するのは簡単です。たとえば:
class vec4 {
private:
float _x, _y, _z, _w;
public:
// vector getter/setters
float& x() { return _x; }
float& y() { return _y; }
float& z() { return _z; }
float& w() { return _w; }
// color getter/setters
float& r() { return _x; }
float& g() { return _y; }
float& b() { return _z; }
float& a() { return _w; }
};
vec4 my_color;
my_color.r() = 1.0f;
my_color.g() = 0.0f;
my_color.b() = 0.0f;
my_color.a() = 1.0f;
かかわらず、これが機能するかどうかの、**は**非常に悪い考えです。あなたは入力システムを破壊しています。これはちょっとしたタイピングを省くためです。適切な方法は、再利用可能な演算子を持つことです(Boostを見てください)。*再利用可能な型はありません。 –
¤私はほとんどKonrad Rudolph ’コメントに同意します。しかし、技術的には、(1)新しいクラス 'Color'を定義する、(2)すべてのコンストラクタで' r'、 'g'、' b'、(3)の参照メンバを参照させて参照するメンバを初期化する(4)「point」メンバに転送するpublicを提供することによって、関連する操作を公開する。しかし、 'r'、' g'と 'b'参照メンバの代わりに、' r() '、' g() 'と' b() 'アクセサだけを考えてください。アレイ内のピクセルに操作を引き渡すために、フライウェイトパターンも考慮してください。乾杯。 –
@ KonradRudolph:型システムをどのように破壊するのか分かりません。 –