Windows runtime 如何迭代一个可写的<;T>;在C++/CX?

Windows runtime 如何迭代一个可写的<;T>;在C++/CX?,windows-runtime,c++-cx,Windows Runtime,C++ Cx,(这也可以用“如何迭代从C++/CX中的C#Windows运行时组件返回的集合?”) 我试图在一个可伸缩的上使用std::for_each,但得到了以下编译时错误 错误C2664:“std::begin”:无法从转换参数1 “我的收藏类型^”到“平台::字符串^”否 用户定义的转换运算符可用,或类型 指向无关的对象;转换需要重新解释转换, C样式转换或功能样式转换 如何迭代集合?要使其工作,您需要添加 #include "collection.h" (可选) 到您的源文件 然后,您可以按如下所

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

我试图在一个可伸缩的上使用
std::for_each
,但得到了以下编译时错误

错误C2664:“std::begin”:无法从转换参数1 “我的收藏类型^”到“平台::字符串^”否 用户定义的转换运算符可用,或类型 指向无关的对象;转换需要重新解释转换, C样式转换或功能样式转换


如何迭代集合?

要使其工作,您需要添加

#include "collection.h"
(可选)

到您的源文件

然后,您可以按如下所示对集合进行迭代

for_each (begin(my_collection), 
          end(my_collection), 
          [&](my_collection_type^ value) {
          // code goes here...
});
注意:您可能还需要
使用名称空间std
(对于每个
)。

这也应该有效

for (IIterator<T> iter = iterable->First(); iter->HasCurrent; iter->MoveNext())
{
   T item = iter->Current;
}
for(IIterator iter=iterable->First();iter->HasCurrent;iter->MoveNext())
{
T项=国际热核实验堆->电流;
}

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

for each (auto item in collection)
{
    item->DoSomething();
}

您真的应该添加有关的错误消息。@GManNickG:C++/CX,而不是C++/CLI.Closed作为“太本地化”关闭?在过去的九个月里,我在MSDN论坛和我参与的邮件列表上看到同样的问题被问了至少十几次。这怎么会“过于本地化”?@AdelBoutros:问一个问题,然后自己立即回答,这绝对没有错。关于堆栈溢出的一些最佳答案(例如)就是以这种方式发布的。堆栈溢出是为了方便信息共享。@AdelBoutros很遗憾,我仍然不理解您的立场:(为什么会在stackoverflow meta上发布一个关于C++/Cx的问题?是否有include或using missing,对于meah来说,每个、begin和end都未定义,这就是遗漏的内容。有一个轻微的语法错误。它应该是[&](我的集合类型^value){..}。也就是说,它应该在最初的一组括号之后使用括号。此外,如果您没有引用lambda之外的任何外部变量,则括号内的和不需要。
for each (auto item in collection)
{
    item->DoSomething();
}