Компилятор classi c не поддерживает C ++ 11, поэтому вы не можете использовать на основе диапазона for
l oop. Вместо этого вы должны использовать традиционный for
l oop.
Delphi s for..in
l oop основан на концепции Enumerator (см. Итерация над контейнерами с использованием операторов For ). Однако Delphi TXMLNodeList
не реализует Enumerator, поэтому вы не можете использовать его в for..in
l oop.
C ++ 11 на основе диапазона for
l oop основан на концепции итераторов . Компиляторы CLang от Embarcadero реализуют итераторы для многих контейнеров в стиле Delphi, которые реализуют метод GetEnumerator()
или свойства Count
+ operator[]
. См. Поддержка итератора C ++ для Delphi перечислимых типов и контейнеров . В компиляторе classi c вам придется использовать такой доступ вручную, например:
for(Iterator iter = list->begin(); iter != list->end(); ++iter)
{
ElementType &elem = *iter;
...
}
for(int index = 0; index < list->Count; ++index)
{
ElementType &elem = (*list)[index]; // or list->Items[index], etc...
...
}
EnumeratorType *enum = list->GetEnumerator();
while (enum->MoveNext())
{
ElementType elem = enum->Current;
...
}
Несмотря на ваше утверждение, Delphi s TXMLNodeList
ДЕЙСТВУЕТ имеют свойства publi c Count
и Nodes[]
(унаследованные от интерфейса IXMLNodeList
) для индексации через узлы (Delphi s XML фреймворк предшествовал C ++ 11, в конце концов), например:
_di_IXMLNodeList Books;
...
for(int i = 0; i < Books->Count; ++i)
{
_di_IXMLNode BookNode = Books->Nodes[i];
...
}
UPDATE : вышеприведенное было основано на предположении, что вы использовали Embarcadero XML framework , имеющий собственные классы TXMLNode
и TXMLNodeList
. Основываясь на вашем комментарии о том, что вы фактически используете вместо него VerySimple XML, который имеет классы с аналогичными названиями, я посмотрел на его код и увидел, что его класс TXmlNodeList
является производным от Delphi TObjectList<T>
класс, который имеет свойства publi c Count
и Items[]
. Итак, вы можете использовать их в for
l oop, например:
TXMLNodeList *Books;
...
for(int i = 0; i < Books->Count; ++i)
{
TXMLNode *BookNode = Books->Items[i];
...
}