c++ - 如何在协议缓冲区中提及枚举 (c++) 的底层数据类型?
问题描述
我想声明一个枚举,但我希望它的大小明确为“int8_t”。根据 protbuf docs[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
}
无论如何我可以强制protobuf生成定义中明确提到的类型的枚举吗?像这样的东西:
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
解决方案
推荐阅读
- r - 在 R 中查找唯一对(不重复任何值)
- r - R:从在线源导入多个文件
- qt - 如何在图形视图上移动 qwidget?
- firebase - Firebase +Vue.js 中的 updateProfile()
- sql - Django 查询不在 shell_plus 中工作,但在 dbshell 中工作
- java - 通过调用 notifyDataSetChange 未在运行时更新可扩展列表视图适配器子
- php - 本地 URL 前面的双反斜杠
- python - I created a program, I input keys and values to add to a dictionary but it doesn't work properly
- android - 如何永远在后台运行应用程序?
- ios - SafeArea 向后兼容性