需要注意的是,凡是体现多态性的函数,返回值必须为引用或者指针,且不得为栈中的临时变量,因此我们调用完GetEnumerator()后,要将生成的迭代器删除,删除的代码写在了MoveNext()内,当游标不可移动的时候,迭代器被删除。
以后就可以用自己的foreach宏定义来遍历元素了:
std::string a;
CSharpCollection csc;
IEnumerable<STD::STRING>& refcsc = csc;
foreach (a , refcsc ){
std::cout 《 a 《 std::endl;
}
上面代码的第三行意在说明,如果一个类中继承了IEnumerable类,它一定是可迭代的,可以调用它的Reset()、MoveNext()、Current(),也可以用我们刚刚写的foreach来进行遍历。