Предположим, что у меня есть 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 (чтобы он мог быть сериализован позже) без глубокого копирования исходных данных в поле байтов?
Я знаю, что я мог бы вручную выполнить сериализацию сразу, но я бы предпочел, если это было возможно.