我的問題從Maya C++ API引用的示例和我想知道如果它是特定於Maya或大致C++成語C++迭代器VS具有長度()方法對象
在瑪雅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);
}
迭代器提供了對正常選擇對象的唯一事情是設置一個的能力過濾器類型,所以它只會ret與過濾器匹配的對象。儘管您可以在第一個示例中明確執行相同的測試。
我的問題是當迭代器和原始對象之間的功能存在重疊時,迭代器的好處是什麼?這只是一個特定於Maya的設計決定,還是總是爲了一些額外的原因而創建迭代器的一般C++慣用法,這是我在這裏不理解的。
感謝您的信息。那麼你會打賭,這對於這組特定的類來說大多是一種便利嗎?因爲正如我所建議的那樣,我可以通過檢查類型來手動應用相同的過濾操作,但對於我來說,它顯然是更多的代碼。我不清楚「next」保護元素有害跳過的好處。 – jdi 2012-08-09 01:56:57
@jdi:或許便利性和可讀性是其中的一部分,但我會說它也強制執行更嚴格的規則並防止更多的錯誤(儘管對於一個微不足道的例子來說,這可能並不明顯)。 – 2012-08-09 02:07:21