Всем привет!
У меня программа обменивается с другой программой сообщениями по сетке. Сообщения различаются между собой по типу, все типы заданы как:
#define MSG_READY 0x0001
#define MSG_ERROR 0x0002
#define MSG_DATASENT 0x0003
Так вот, некоторые сообщения не несут никакой дополнительной информации, кроме своего типа (например как MSG_READY, MSG_ERROR из списка вверху), но некоторые сообщения также передают и дополнительную информацию, (MSG_DATASENT). Вот эти дополнительные данные могут быть целым числом (int), дробным числом (double), строкой(std::wstring). Я сначала устроил это так:
/// Тип значения, хранящегося в сообщении
typedef enum Msgval_tag {
mvtInt,
mvtDouble,
mvtString,
mvtNoVal
} EnValType;
/// Само значение, хранящееся в сообщении
typedef union Msgvalue {
int n;
double d;
wchar_t ws[1024];
} UnValType;
/// Класс сообщения
class Message {
public:
DWORD m_dwType;
EnValType m_enValType;
UnValType m_unValue;
};
Но что-то мне не сильно нравится вариант с union. Может у кого-то была похожая ситуация — поделитесь идеями... Или может даже не стоит пытаться сделать один класс для хранения значений разного типа?
Или я в принципе не в ту сторону копаю и обмен сообщениями делается гораздо более по-другому?
Спасибо.