如何在 proto3 中使用其名称获取字段对象
How to get a field object using its name in proto3
我正在将模式从 proto2 语法迁移到 proto3 语法。我想消除扩展,因为它们不受支持。是否可以在 proto3 中使用字段名获取对象,类似于 MutableExtension 在 proto2 中所做的。
例如,
proto2 语法中的架构
message Foo {
message Bar {
unint32 a = 1;
}
extend Foo {
Bar b = 1;
}
}
C++
Foo::Bar b_val = foo.MutableExtension(Foo::b);
现在在 proto3 中,我可以这样做:
syntax="proto3";
message Foo {
message Bar {
unint32 a = 1;
}
Bar b = 1;
}
C++ 代码:
Foo::Bar b_val = foo.mutable_b();
不过,我想用名字Foo::b得到一个Foo::Bar对象。有办法吗?
不清楚你为什么需要这个,但你要求的是 有点 可行。
Foo::b
是一个普通的成员函数,这意味着 &Foo::b
是一个常规的指向成员函数的指针。
因此您可以使用这些实体的常规 c++ 语法来使用它:
auto b_ref = &Foo::b;
Foo::Bar b_val = (foo.*b_ref)();
我正在将模式从 proto2 语法迁移到 proto3 语法。我想消除扩展,因为它们不受支持。是否可以在 proto3 中使用字段名获取对象,类似于 MutableExtension 在 proto2 中所做的。
例如,
proto2 语法中的架构
message Foo {
message Bar {
unint32 a = 1;
}
extend Foo {
Bar b = 1;
}
}
C++
Foo::Bar b_val = foo.MutableExtension(Foo::b);
现在在 proto3 中,我可以这样做:
syntax="proto3";
message Foo {
message Bar {
unint32 a = 1;
}
Bar b = 1;
}
C++ 代码:
Foo::Bar b_val = foo.mutable_b();
不过,我想用名字Foo::b得到一个Foo::Bar对象。有办法吗?
不清楚你为什么需要这个,但你要求的是 有点 可行。
Foo::b
是一个普通的成员函数,这意味着 &Foo::b
是一个常规的指向成员函数的指针。
因此您可以使用这些实体的常规 c++ 语法来使用它:
auto b_ref = &Foo::b;
Foo::Bar b_val = (foo.*b_ref)();