Protocol buffers 如何从protobuf描述符中获取方法选项?

Protocol buffers 如何从protobuf描述符中获取方法选项?,protocol-buffers,protoc,Protocol Buffers,Protoc,我尝试用protobuf编译器解析.proto文件。但这里有一个令人困惑的问题,我无法获得方法的选项 似乎我的选项被视为“未知字段”,而不是选项 有什么办法解决这个问题吗?谢谢 (我不想在这里粘贴太多代码,但我认为有必要全面描述这个问题。对此我深表歉意。) (环境:g++4.7、Ubuntu 16.04、Protobuf 3.0.0) 选项不是未知字段,因为它们是!在proto3中,扩展应该被删除,但是当您使用导入程序动态解析.proto文件时,无论您声明的语法版本如何,扩展都会被启用 如果在

我尝试用protobuf编译器解析.proto文件。但这里有一个令人困惑的问题,我无法获得方法的选项

似乎我的选项被视为“未知字段”,而不是选项

有什么办法解决这个问题吗?谢谢

(我不想在这里粘贴太多代码,但我认为有必要全面描述这个问题。对此我深表歉意。)

(环境:g++4.7、Ubuntu 16.04、Protobuf 3.0.0)




选项不是未知字段,因为它们是!在proto3中,扩展应该被删除,但是当您使用
导入程序动态解析
.proto
文件时,无论您声明的语法版本如何,扩展都会被启用

如果在内部for()循环中添加一行,如下所示:

print(method_d->options().DebugString());
您将得到如下输出:

[lrpc.CmdID]: 1
您可以使用protobuf反射枚举扩展值——它们在您调用时显示

// example.proto
syntax = "proto3";

package foobar;

import "google/protobuf/wrappers.proto";
import "google/protobuf/empty.proto";

import "lrpc.proto";

message SearchRequest {
    // ... 
}

message SearchResponse {
    // ...
}

service SearchService {
    rpc Search( SearchRequest ) returns( SearchResponse ) {
        option( lrpc.CmdID ) = 1;
    }
}
print(method_d->options().DebugString());
[lrpc.CmdID]: 1