(这也可以表述为“我如何迭代C ++ / CX中C#Windows运行时组件返回的集合?”)
我尝试在std::for_each
上使用IIterable<T>
,但收到以下编译时错误
错误C2664:'std :: begin':无法转换参数1 'my_collection_type ^'到'Platform :: String ^'没有 可用的用户定义转换运算符或类型 指出是无关的;转换需要reinterpret_cast, C风格的演员表或功能风格的演员
如何迭代集合?
答案 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