如何在C ++ / CX中迭代IIterable <t>?</t>

时间:2012-06-17 20:52:43

标签: windows-runtime c++-cx

(这也可以表述为“我如何迭代C ++ / CX中C#Windows运行时组件返回的集合?”)

我尝试在std::for_each上使用IIterable<T>,但收到以下编译时错误

  

错误C2664:'std :: begin':无法转换参数1   'my_collection_type ^'到'Platform :: String ^'没有   可用的用户定义转换运算符或类型   指出是无关的;转换需要reinterpret_cast,   C风格的演员表或功能风格的演员

如何迭代集合?

3 个答案:

答案 0 :(得分:10)

为此,您需要添加

#include "collection.h"

(和可选)

using namespace Windows::Foundation:Collections

到您的源文件。

然后您可以按如下方式迭代集合

for_each (begin(my_collection), 
          end(my_collection), 
          [&](my_collection_type^ value) {
          // code goes here...
});

注意:您可能还需要using namespace std(对于for_each)。

答案 1 :(得分:9)

这也应该有用

for (IIterator<T> iter = iterable->First(); iter->HasCurrent; iter->MoveNext())
{
   T item = iter->Current;
}

答案 2 :(得分:2)

在C ++ / CX中编写Windows运行时组件时,可以使用类似C#的构造:

CustomNullObject