2014-09-09 2 views
0

Это фрагмент открытого кода. Полный исходный код доступен https://github.com/gec/dnp3/blob/master/src/opendnp3/DNP3/ResponseContext.hC++ указатель на класс в виде

ObjectWriteIterator owi = arAPDU.WriteContiguous(apObject, start,stop); 

    for(size_t i = start; i <= stop; ++i) {  
    if(owi.IsEnd()) { // out of space in the fragment   
     this->mStaticWriteMap[arKey] = 
       boost::bind(&ResponseContext::WriteStaticObjects<T>, this, apObject, 
     arStart, arStop, arKey, _1);      return false;  
    } 

    apObject->Write(*owi, arStart->mValue);   
    ++arStart; //increment the iterators 
    ++owi;  
    } 

ObjectWriteIterator::ObjectWriteIterator() : 
    mpPos(NULL), 
    mIndex(1), 
    mStart(0), 
    mStop(0), 
    mObjectSize(0) 
{} 

Мой вопрос: я не понимаю, где *owi имеет в виду в данном контексте.

ответ

0

owi является iterator, который является «стандартным» интерфейсом C++ для , итерируя над некоторой коллекцией.

Интерфейс их использовать указатель symantics, поэтому * оператора «разыменовывает» итератор и возвращает ссылку на значение в настоящее время «точка» к, и увеличивающуюся его через ++ перемещает его к следующему элементу в коллекции повторяется.

В этом случае, это выглядит как набор ObjectWrite объектов внутри коллекции, указанного apObject между start и stop (запуск и остановка также обычно определяется набором iterators к некоторому расположению в коллекции).

0

извините, я раньше не уверен, можно построить Самодостаточный «макет» класс итератора, которые используют скрытым является заголовочным файлом

рядного подталкивание :: uint8_t * ObjectWriteIterator :: оператора *() const { if (this-> IsEnd()) throw InvalidStateException (LOCATION, "Конец итерация");
return mpPos; }

в файле заголовка. Извините за дикий гусиный пробег. Спасибо за быстрый ответ, и я узнал кое-что новое о основной реализации итератора.

Смежные вопросы