**大家好,
我是protobuf的新手。我试图在这里了解基本知识。
我已在目录Test.proto
中将样本原型文件创建为/path/to/Directory/
:
syntax = "proto2";
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}**
message PhoneNumber {
required string number = 1;
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4;
}
并用
进行编译 protoc -I=/path/to/Directory/ --cpp_out=/path/to/Directory/ /path/to/Directory/Test.proto
这将创建2个文件Test.pb.h
和Test.pb.cc
。现在我可以看到类Person
中有不同的函数。让我们来看一下函数(源自required string name = 1;
文件的Test.proto
行)
现在,编译器执行此操作并提供以下各种功能:
bool has_name() const;
void clear_name();
static const int kNameFieldNumber = 1;
const ::std::string& name() const;
void set_name(const ::std::string& value);
void set_name(::std::string&& value);
void set_name(const char* value);
void set_name(const char* value, size_t size);
::std::string* mutable_name();
::std::string* release_name();
void set_allocated_name(::std::string* name);
现在我的问题是:在哪里可以找到每个功能的描述及其作用?
答案 0 :(得分:3)
起点是here(静态代码)和here(生成的代码)。后者概述了您在“特定”中的要求-搜索string* mutable_foo()
和string* release_foo()
(请注意,proto2与proto3是重复的)。
答案 1 :(得分:2)
根据C ++生成的代码的documentation:
string* mutable_foo()
:返回指向可变字符串的指针 存储字段值的对象。如果该字段未事先设置 调用,则返回的字符串将为空(不是默认值) 值)。调用此命令后,has_foo()
将返回true
和foo()
将返回写入给定字符串的任何值。
string* release_foo()
:释放字段的所有权并 返回字符串对象的指针。打电话后,来电者 获取分配的字符串对象的所有权,has_foo()
将 返回false,foo()
将返回默认值。
您可以在同一页面中找到其余功能的说明。