Я хочу объявить 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Задача ещё не решена.
Других решений пока нет …