Garmaine Staff asked 1 year ago

I am trying to write a generic pattern for a data struct which is created from an incoming stream ("message") of multiple parts. The message sub-parts are ordered in a standard way determined by the message "category" (to avoid use of type as not cpp type) and each sub-part relates to a cpp type. For example a message of category A might look like [int x, double y]. I would like to write a struct for each message category to read in the data. I know cpp does not have reflection which would allow it to naturally order a class/structs data members, however order/ability to iterate over a structs members with type information would be exactly what I need. What are the design pattern options which would allow to iterate over members of a struct? For example in initialisation the struct could have a std::vector<void*> which get initialised to all the data members but this does not carry type information and I cannot think of a way to generically say that a data member should be included or where in the vector it sits.

It would be ideal to have a design something like;

struct MessageA
{
    Ordered<int> x_;
    Ordered<double> y_;

    MessageA(int x, double y):
        x_(0, x), y_(1, y)
    ...
}

Perhaps with a inherited class OrderedStruct as well