我已经编写了自己的通用树实现,并且在为它编写迭代器时,我遇到了 const 正确性的问题。我目前遇到的问题如下:
这是我编写的 DFS 迭代器的头文件:
template<class Item>
class DFSIterator
{
public:
DFSIterator(const Item& rRootNode);
~DFSIterator();
DFSIterator* First();
DFSIterator* operator++(int rhs);
Item* operator*() const;
Item* operator->() const;
bool isDone() const;
template <class Node> friend class Node;
private:
void initListIterator(const Item* currentNode);
bool m_bIsDone;
const Item* m_pRootNode;
const Item* m_pCurrentNode;
ListIterator<Item>* m_pCurrentListIter;
std::map<const Item*, ListIterator<Item>*> m_listMap;
};
所以我关心的是解引用运算符:
template<class Item>
Item* DFSIterator<Item>::operator*() const
{
if(isDone())
{
return NULL;
}
else
{
return const_cast<Item*>(m_pCurrentNode);
}
}
在那里做一个 const_cast 合适吗?我想知道如果用户将 const 对象放入容器中,这是否会导致问题?