Re: CMAP under vs2005+
Giovanni Dicanio wrote:
"Giovanni Dicanio" <giovanniDOTdicanio@REMOVEMEgmail.com> ha scritto nel
messaggio news:%23d2CDbFOJHA.584@TK2MSFTNGP06.phx.gbl...
I would like to have a const Lookup(), but the version I posted here was
based on Tommy's version, and in his Lookup implementation he modified the
iterator data member.
So, the Lookup can't be const in that case, beacuse a data member (the
iterator) is modified.
I prefer a const Lookup, and no iterator data members.
This was OP's code:
BOOL Lookup(const TKEYSTR &k, VALUE& v)
{
it = this->find(k);
if (it != this->end()) {
v = it->second;
++it;
return TRUE;
}
return FALSE;
}
and this was the code I posted, trying to get functional equivalence to OP's
code (i.e. modifying iterator data member):
bool Lookup(const KeyType & key, ValueType & value)
{
m_it = m_map.find(key);
if (m_it != m_map.end())
{
value = m_it->second;
++m_it;
return true;
}
return false;
}
Without being required to have functional equivalence to OP's code, I would
avoid the ++m_it, and I would just use a non-data-member iterator as a
result of map.find().
Giovanni:
Ah yes, I see now. In Tommy's original version, derived from CMap, Lookup() was
const, as it is in CMap. But in his later version, derived from std::map, it was
not const, as you note.
I certainly think that Lookup() should be const, because CMapEx is supposed to
be a CMap replacement, even if it cannot be used polymorphically.
--
David Wilkinson
Visual C++ MVP