I wonder if there is a way to make an abstract enumerated value typecast?
I.e. pseudo-code:
Type TAbc = (ta,tb,tc,td);
Type TXyz = (tx,ty,tz,tw);
procedure ReturnThirdElement(inp: TEnumerated): TEnumerated;
begin
result := TEnumerated[2];
//result := TEnumerated(Ord(low(TEnumerated))+2));
end;
var ABC: TAbc;
XYZ: TXyz;
begin
ABC := ReturnThirdElement(TAbc);
XYZ := ReturnThirdElement(TXyz);
end;
In reality I want to make a random for a computer game that makes a random choice between low(enumeratedvalue) and high(enumeratedvalue) despite what enumerated type Value is and returns the value of the same type.
I.e. now I have to do
Nationality := TNationality(random(Ord(High(TNationality))+1));
But I'd like to have something more readable like
Nationality := myRandom(TNationality);
or at least
Nationality := TNationality(myRandom(TNationality));
without need to write a specific function GetRandomNationality(inp: TNationality): TNationality; for each enumerated type case or overloading myrandom(inp:TNationality), myrandom(inp: TProfession)...
*like "for" cycle does: for i in TNationality do ...
P.S. I'm looking for a simple and reliable solution "make and forget". If there is no simple one (yes, my idea might be very stupid
), I'll just stick with double type-casting.