假设我有一个带有字节数组字段的proto:
message MyProto {
optional bytes data = 1;
}
一个我不能控制的API给了我一个指向源数据及其大小的指针。我想从这些数据中生成一个MyProto
,而不需要进行深度复制。 我本以为这很容易,但事实证明这是不可能的。使用set_data
进行深度复制很容易。 Protobuf提供了一个set_allocated_data
函数,但它需要一个指向std::string
的指针,这对我没有帮助,因为(除非我错了)没有办法在其中创建一个std::string
而不进行深度复制。
void populateProto(void* data, size_t size, MyProto* message) {
// Deep copy is fine, I guess.
message->set_data(data, size);
// Shallow copy would be better...
// message->set_allocated_data( ??? );
}
有没有办法正确地填充此proto(以便稍后可以对其进行序列化),而不必将源数据深度复制到字节字段中?
我知道我可以手动进行序列化,但如果可能的话,我宁愿不这样做。