Jump to content
  • Advertisement
Sign in to follow this  
Crusable77

typedef, structs, and arrays

This topic is 2086 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

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.

Share this post


Link to post
Share on other sites
Advertisement

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...};
}

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!