I am running a simulation in which I have objects of a class which use different models. These models are randomly selected for some objects of the class and specifically decided for some objects too. These objects communicate with each other for which I am using structures (aka struct) in C++ which has some
- standard variables and
- some additional variables which depends on models which the objects communicating with each other have.
So, how can I do this?
Thanks in advance.
All instances of a structure or class have the same structure. Luckily, there are some tricks that can be used to ‘simulate’ what you try to do.
The first trick (which can also be used in C), is to use a union, e.g.:
In a union, all members take up the same space in memory. As a programmer you have to be careful. You can only get out of the union what you put in. If you initialize one member of a union, but you read another member, you will probable get garbage (unless you want to do some low-level hacks, but don’t do this unless you are very experienced).
Unions often come together with another field (outside the union) that indicates which member is actually used in the union. You could consider this your ‘condition’.
A second trick is use the ‘state’ pattern (see http://en.wikipedia.org/wiki/State_pattern). From the outside world, the context class looks always the same, but internally, the different states can contain different kinds of information.
A somewhat simplified approach for state is to use simple inheritance, and to use dynamic casts. Depending on your ‘condition’, use a different subclass, and perform a dynamic cast to get the specific information.
E.g., suppose that we have a Country class. Some countries have a president, others have a king, others have an emperor. You could something like this:
In your application you could work with pointers to Country, and do a dynamic cast to Republic or Monarchy where the president or king is needed.
This example can be easily transformed into one using the ‘state’ pattern, but I leave this as an exercise for you.
Personally, I would go for the state pattern. I’m not a big fan of dynamic casts and they always seem to be kind-of-hack for me.