![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Maintaining parallel arrays, although simple, is awkward. It is safer and more elegant to package type information with the array elements. One way to do the packaging is to wrap a structure around both the trade-bearing union and a type-specifying integer:
struct tagged_trade { int code; union trade; }
Then, you can define an array of tagged_trade
objects:
struct tagged_trade *trade_pointers[100];
Given such an array, you determine type by extracting the value in the
code
structure variable, as in the following example, in which
limit
is an array index:
trade_pointers[limit] -> code
Once you know what sort of object is stored in the union, you can go after
the values stored. The following example, which assumes that the trade is
a stock_trade
object, illustrates:
*-- Get stock_trade object | from trade object v ------ trade_pointers[limit] -> trade.stock.pe_ratio -------- --------- ^ ^ | *-- Get pe_ratio from | stock_trade object | *-- Get trade object from tagged_trade object