TheDespite
TheDespite

Reputation: 343

Struct property that returns a struct of its own type

I'm trying to define a struct in C++ that has properties to return pre-defined values of it's own type.

Like many APIs have for Vectors and Colors like:

Vector.Zero; // Returns a vector with values 0, 0, 0
Color.White; // Returns a Color with values 1, 1, 1, 1 (on scale from 0 to 1)
Vector.Up; // Returns a vector with values 0, 1 , 0 (Y up)

Source: http://msdn.microsoft.com/en-us/library/system.drawing.color.aspx (MSDN's page of their Color type)

I've been trying to search for hours but I can't for the heart of me even figure out what it's called.

Upvotes: 3

Views: 203

Answers (3)

yzhang
yzhang

Reputation: 134

You can mimic it with static members:

struct Color {
    float r, g, b;
    Foo(float v_r, float v_g, float v_b):
        r(v_r), g(v_g), b(v_b){};
    static const Color White;
};

const Color Color::White(1.0f, 1.0f, 1.0f);

// In your own code
Color theColor = Color::White;

Upvotes: 2

Louis Brandy
Louis Brandy

Reputation: 19908

//in h file
struct Vector {
 int x,y,z;

 static const Vector Zero; 
};

// in cpp file
const Vector Vector::Zero = {0,0,0};

Like this?

Upvotes: 4

John Colanduoni
John Colanduoni

Reputation: 1626

This is a static property. Unfortunately, C++ does not have properties of any type. To implement this, you probably want either a static method or a static variable. I would recommend the former.

For the Vector example, you would want something like:

struct Vector {
  int _x;
  int _y;
  int _z;

  Vector(int x, int y, int z) {
    _x = x;
    _y = y;
    _z = z;
  }

  static Vector Zero() {
    return Vector(0,0,0);
  }
}

You would then write Vector::Zero() to get the zero vector.

Upvotes: 2

Related Questions