这是一个开源代码片段。完整源代码可用https://github.com/gec/dnp3/blob/master/src/opendnp3/DNP3/ResponseContext.h
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 :(得分:0)
owi
是iterator
,它是迭代某些集合的“标准”C ++接口。
接口让它们使用指针 - 语义,因此*
运算符'取消引用'迭代器并返回对它当前“指向”的值的引用,并通过++
递增它移动它到迭代的集合中的下一个项目。
在这种情况下,它看起来像ObjectWrite
和apObject
之间由start
指定的集合中的stop
个对象的集合(开始和停止通常也由iterators
设置为集合中的某个位置。
答案 1 :(得分:0)
头文件中的内联boost :: uint8_t * ObjectWriteIterator :: operator *()const { if(this-&gt; IsEnd())抛出InvalidStateException(LOCATION,“End of 迭代“);
返回mpPos; }
。抱歉野鹅跑。感谢您的快速回复,我也学到了关于迭代器核心实现的新知识。