Согласно Документы для разработчиков Google буфер протокола должен иметь operator[]
,
Я только начал работать с ними, и, возможно, я не до конца понял. Приложение для файлов данных «caffe» (программа машинного обучения). (Я пытаюсь использовать их для записи файлов данных, которые затем может прочитать caffe.)
У меня есть эта строка кода в моей программе (1)
datumFloatData->operator[](caffe_ix) = (float)(0.5 * (z_pos + 1.0));
определяется
google::protobuf::RepeatedField<float>* datumFloatData = \
datum.mutable_float_data();
это компилируется нормально:
for(int32_t ix{0}; ix < ix_max; ++ ix)
{
datumFloatData->Add(-1.0f);
}
Однако (1) не компилируется, ошибка:
error: ‘class google::protobuf::RepeatedField<float>’ has no member
named ‘operator[]’; did you mean ‘operator=’?
datumFloatData->operator[](caffe_ix) = (float)(0.5 * (z_pos + 1.0));
Что тут происходит? Я могу использовать Add()
метод без проблем, но operator[]
не определено?
Редактировать: это также не работает:
google::protobuf::RepeatedField<float>& \
datumFloatData_ref{*datumFloatData};
datumFloatData_ref[2] = 1.0f;
*datumFloatData->Mutable(caffe_ix) = (float)(0.5 * (z_pos + 1.0));
Вы, вероятно, имеете старую версию protobuf. Быстрая проверка показывает, что operator[]
тривиальная обертка вокруг Get
и довольно новый. Добавлено 2016-09-16
Других решений пока нет …