如何在C++中读取Protobuf的FileOptions自定义全局选项?
在C++中读取Protobuf全局文件自定义选项的方法
要读取全局的my_file_option,你需要访问文件描述符(FileDescriptor),而非消息对象,具体实现如下:
实现步骤
- 获取当前proto文件对应的
FileDescriptor实例 - 从文件的
options中通过GetExtension提取自定义选项
示例代码
假设你的proto文件生成的C++头文件为your_proto_file.pb.h,代码示例如下:
#include "your_proto_file.pb.h" #include <iostream> int main() { // 获取当前proto文件的FileDescriptor const google::protobuf::FileDescriptor* file_desc = your_proto_file::descriptor(); // 读取全局自定义选项my_file_option if (file_desc->options().HasExtension(my_file_option)) { std::string value = file_desc->options().GetExtension(my_file_option); std::cout << "全局文件选项my_file_option的值: " << value << std::endl; } else { std::cout << "未设置全局文件选项my_file_option" << std::endl; } return 0; }
关键说明
FileDescriptor是proto文件的元数据描述类,包含文件级的所有信息(包括全局选项)file_desc->options()会返回FileOptions对象,也就是你在proto中扩展的目标类型- 建议先用
HasExtension判断选项是否存在,再调用GetExtension获取值,避免访问未设置的选项引发错误
内容的提问来源于stack exchange,提问作者Jabrwock
相关产品推荐
相关产品推荐

