c++ - Protobuf 动态和静态库
问题描述
我有两个自定义的 protobuf 库。一个是动态的,另一个是静态的。静态库有一条消息:
message DataType
{
int number = 1;
string name_1 = 2;
string name_2 = 3;
string name_3 = 4;
}
// The dynamic lib has a message:
message MyMessage
{
DataType type = 1;
}
我通过将静态原型库链接到它来构建动态原型库。然后我构建 exe 应用程序,并将动态 proto 库链接到该应用程序。
问题是当我设置 name_1、name_2 或 name_3 之一时,它们都有这个值。我认为所有这些字符串都有相同的缓冲区。如果将动态库转换为静态库,那么问题就消失了。谁能解释一下它有什么问题?谢谢你。
解决方案
如果未设置字段,则应返回空字符串。请在此处查看文档。
如果您使用的是版本 2,您可以查询该字段是否由has_name_x()
.
顺便说一下,有几种方法可以设置一个值:
- 最简单的创建一个副本:
void set_name_x(const string& value)
- 如果
C++11
您可以移动字符串值:void set_name_x(string&& value)
- 您可以传递指针:
void set_allocated_name_x(string* value)
- 您可以获得指向存储字符串的指针:
string* mutable_name_x()
我建议熟悉 protobuf 并让它管理内存和使用set_name_x
. 如果还不够,您可以通过手动内存管理来优化您的代码。
推荐阅读
- c++ - Translate return codes SQLITE_OK, ..., SQLITE_DONE to an enum class in C++ (without ask clients to include the C header)
- google-chrome-extension - Detect tab restore event
- python - My Spyder console cannot recognize pygal once I import it
- python - 熊猫数据框中的Covent json
- websocket - Send message only to certain client using websockets with Rsocket and Spring Webflux
- c# - 线程间共享方法
- python - how to create product auto Code generator python django
- javascript - (Slack API Bolt 项目)使用 Context 对象将属性从一种方法传递到另一种方法
- python - 具有给定角色的Discord python bot问题
- json - rest_framework_gis 中 PointField 的数据