carguy:
Any thoughts on that approach?
const uint16_t* first_displayed_value_icon;
the icon is stored how?
const char* firstValue;
Depending on how your data is structured, using a string for the values can be easier to work with and you may be able to overload a displayfunction depending on wether that particular spot on the display is a reference to a float or to an int
footnote:
typedef struct
this is C++; you don't need the typedef keyword, enums structs and unions are automatically types.