我的问题引用了Maya C++ API的一个示例,我想知道它是特定于 Maya 还是通用 C++ 习惯用法
在 Maya API 中有一个名为 的对象MSelectionList
,它是一个容器,表示场景中的对象。它还有一个同伴MItSelectionList
,它是MSelectionList
实例的迭代器。
现在我明白了迭代器的好处是它知道如何正确地循环对象,但在这种情况下,它MSelectionList
有一个.length()
方法,以及与迭代器相同的 getter,除了你提供索引。
例子...
MSelectionList activeList;
MGlobal::activeSelectionList(activeList);
unsigned int length = activeList.length();
for (unsigned int i=0 ; i < length; i++ ) {
MDagPath item;
iter.getDagPath(i, item);
}
MSelectionList activeList;
MGlobal::activeSelectionList(activeList);
MItSelectionList iter( activeList );
for ( ; !iter.isDone(); iter.next() ) {
MDagPath item;
iter.getDagPath(item);
}
迭代器在普通选择对象上提供的唯一功能是设置过滤器类型的能力,以便它只返回与过滤器匹配的对象。尽管您可以在第一个示例中明确执行相同的测试。
我的问题是,当迭代器和原始对象之间的功能重叠时,迭代器有什么好处?这只是一个特定于 Maya 的设计决策,还是一个通用的 C++ 习惯用法,总是出于一些我在这里不理解的额外原因创建迭代器。