Я хочу объявить enum, но я хочу, чтобы он был явно "int8_t". Согласно документации protbuf [1], сгенерированное перечисление в c ++ является стандартным перечислением c ++ без явного упоминания основного типа.
т.е. Объявление вроде этого:
enum Foo {
VALUE_A = 0;
VALUE_B = 5;
VALUE_C = 1234;
}
будет генерировать что-то вроде этого:
enum Foo {
VALUE_A = 0;
VALUE_B = 5;
VALUE_C = 1234;
Foo_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min,
Foo_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max
}
Могу ли я в любом случае заставить протобуф сгенерировать перечисление с типом, явно указанным в определении? Примерно так:
enum Foo : int8_t {
VALUE_A = 0;
VALUE_B = 5;
VALUE_C = 1234;
Foo_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32min,
Foo_INT_MIN_SENTINEL_DO_NOT_USE_ = ::google::protobuf::kint32max
}
Зачем мне это нужно?
Я хочу переслать декларацию моего прото-перечисления, и для пересылки декларации перечисления вам нужно:
Упомяните тип данных (чтобы компилятор мог принять размер, используемый объектом)
В объявлении перечисления должен быть указан тот же тип, что и в определении [2]
Любая помощь будет высоко ценится.
[1] https://developers.google.com/protocol-buffers/docs/reference/cpp-generated#enum
[2] https://stackoverflow.com/a/42768812/3069919