gpt4 book ai didi

c++ - 在 protoc 插件中处理自定义选项

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:20 24 4
gpt4 key购买 nike

我正在尝试开发一个插件,以便自动生成特定于我的应用程序的代码。虽然一个可能更简单的策略是让我的代码使用由 c++ 插件生成的文件,但我正在尝试从头开始编写插件。

正如我添加到我的包中的文档中所解释的那样

import "google/protobuf/descriptor.proto";

extend google.protobuf.FieldOptions {
optional int32 testext = 50000;
}

...

message replyT {
enum ackT {
ok = 0;
failed = 1;
}

required ackT ack = 1 [ (testext) = 42 ];
}

现在的问题是如何访问“测试文本选项”?

我已经能够使用

转储 50000 42(分机号码和分配的值)
class TestGenerator: public CodeGenerator {
int i;
public:
TestGenerator(const string& name) {};
virtual ~TestGenerator() {};
virtual bool Generate(const FileDescriptor* file,
const string& parameter,
GeneratorContext* context,
string* error) const
{
........................
std::cerr <<"\t\t"<<file->message_type(i)->field(j)->options().DebugString()<<std::endl;
.................

假设(i 和 j 是正确的)

但除此之外,在浏览文档后我无法测试如何测试字段是否启用了扩展名 testext(即使使用 50000)和分配的值。

语言指南建议但是 GetExtension 方法使用的类型只在 *.pb.h 中生成,所以我不能在我的生成器中使用它。

string value = MyMessage::descriptor()->options().GetExtension(my_option);

有什么线索吗?

最佳答案

您必须为定义自定义选项的文件运行 C++ 生成器。之后,您可以使用您已经了解的普通 GetExtension() 语法。

关于c++ - 在 protoc 插件中处理自定义选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20247262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com