Буферы протокола Google: нет оператора []?

Согласно Документы для разработчиков 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));

2

Решение

Вы, вероятно, имеете старую версию protobuf. Быстрая проверка показывает, что operator[] тривиальная обертка вокруг Getи довольно новый. Добавлено 2016-09-16

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]