【发布时间】:2012-08-06 04:54:36
【问题描述】:
我的问题引用了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++ 习惯用法,总是出于一些我在这里不理解的额外原因创建迭代器。
【问题讨论】: