В вашем примере кода значения из перечисления Request и enum Response имеют одинаковые значения (0 для REQ_LOGIN и RES_LOGIN и 1 для REQ_GET_FIELD и RES_GET_FIELD), а их значения не соответствуют значениям в перечислении MessageType (0 для REQ_LOGIN, 1 для REQ_GET_FIELD, 2 для RES_LOGIN и 3 для RES_GET_FIELD). Разве это не проблема?
Если вы хотите иметь одинаковое число перечислений, вы можете попробовать следующий подход:
enum MessageCategories
{
Request = 0,
Response,
AnythingElse
}
const int Watermark = 100;
это перечисление MessageCategories и const int Watermark являются общими для всех классов.
Теперь вы можете переопределить свои перечисления следующим образом:
enum Request
{
REQ_LOGIN = MessageCategories::Request * Watermark,
REQ_GET_FIELD,
REQ_LAST_ITEM,
}
enum Response
{
RES_LOGIN = MessageCategories::Response * Watermark,
RES_GET_FIELD,
RES_LAST_ITEM,
}
В этом случае вам не нужен ваш перечислимый MessageType, потому что все ваши перечислимые коды согласованы.