Sign in to follow this  
Followers 0
Crusable77

typedef, structs, and arrays

3 posts in this topic

Hello, I have a struct that defines an RGBA colour: 

struct Colour{
	float r; 
	float g;
	float b;
	float a;
};

Then I have an array of some predefined colours  so instead of having  to write out something link display.clear(Colour(1.f, 0.f, 0.f, 1.f) I would instead write  display.clear(clr::red); So I have an array of colours: 

//pre defined colours 
Colour colours[6] = {{1.f, 0.f, 0.f, 1.f},
					 {1.f, 0.f, 0.f, 1.f},
					 {1.f, 0.f, 0.f, 1.f},
					 {1.f, 0.f, 0.f, 1.f},
					 {1.f, 0.f, 0.f, 1.f},
					 {1.f, 0.f, 0.f, 1.f}};

Now here is my problem. I want to typedef all the elements in the array so instated of writing clr::colours[0] I write clr::red. SO I tried writing them like this and it did not work: 

namespace clr{
	typedef colours[0] red;
	typedef colours[1] green;
	typedef colours[2] blue;
	typedef colours[3] magenta;
	typedef colours[4] white;
	typedef colours[5] black;
}//namespace clr

Is this possible or did I just do it wrong?  Thanks for any help.

0

Share this post


Link to post
Share on other sites

Though, I don't recall whether 'colours[1]' is garunteed to be initialized before 'green' is (might be undefined behavior), so it'd probably be better (and clearer in the code) to do it the other way around:


Unless you initialize them in different translation units, it should be just fine. I still prefer the other method, or this variation of it:
struct Colour{
  float r, g, b, a;
  
  Colour(float r, float g, float b, float a) : r(r), g(g), b(b), a(a) {
  }
};

namespace clr {
  const Colour red(1.f, 0.f, 0.f, 1.f);
  const Colour green(0.f, 1.f, 0.f, 1.f);
  
  //pre defined colours 
  Colour colours[6] = {red,
                       green,
                       etc...};
}
1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0