Как я могу упомянуть базовый тип данных для перечисления (c ++) в буферах протокола? - PullRequest
0 голосов
/ 07 ноября 2018

Я хочу объявить 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
    }

Зачем мне это нужно?

Я хочу переслать декларацию моего прото-перечисления, и для пересылки декларации перечисления вам нужно:

  1. Упомяните тип данных (чтобы компилятор мог принять размер, используемый объектом)

  2. В объявлении перечисления должен быть указан тот же тип, что и в определении [2]

Любая помощь будет высоко ценится.

[1] https://developers.google.com/protocol-buffers/docs/reference/cpp-generated#enum

[2] https://stackoverflow.com/a/42768812/3069919

...