c++ protobuf 没有proto文件 反射取值
时间: 2023-07-25 21:14:13 浏览: 91
如果没有proto文件,你需要手动构造一个 protobuf::Message 对象,然后使用反射机制来设置和获取字段的值。可以按照以下步骤进行:
1. 定义消息类型,例如:
```c++
struct MyMessage {
int32_t int_field;
float float_field;
std::string string_field;
};
```
2. 创建一个 protobuf::Message 对象,例如:
```c++
std::shared_ptr<protobuf::Message> message = std::make_shared<MyMessage>();
```
3. 使用反射机制设置字段的值,例如:
```c++
auto descriptor = message->GetDescriptor();
auto reflection = message->GetReflection();
auto int_field_descriptor = descriptor->FindFieldByName("int_field");
reflection->SetInt32(message.get(), int_field_descriptor, 123);
```
4. 使用反射机制获取字段的值,例如:
```c++
auto int_value = reflection->GetInt32(*message, int_field_descriptor);
```
注意,这种方法需要手动处理字段的类型和序列化方式,比较麻烦。如果可以得到原始的 proto 文件,建议使用 protobuf 编译器生成对应的 C++ 代码,更方便地使用 protobuf。
阅读全文