Oltre alla comodità di cambiare contenitore, spesso con la STL se non usi typedef puoi arrivare ad avere dichiarazioni mostruose; con i typedef:
codice:
class INISection
{
//Typedef for the internal map
typedef std::map<std::_tcstring,std::_tcstring,CaseInsensitive_Less> ISmap;
/* ... */
}
/* ... */
void MeasurementUnitsContainer::RemoveDataFromINI(INISection & IniSect)
{
IniSect.Read();
typedef std::list<INISection::ISmap::iterator> itList;
itList toDelete;
INISection::ISmap & im=IniSect.GetInternalMap();
{
std::_tcstring prefix(_T("MUItem"));
INISection::ISmap::iterator it, end=im.end();
for(it=im.begin();it!=end;it++)
{
if(it->first.compare(0,prefix.size(),prefix)==0)
toDelete.push_back(it);
}
}
{
itList::const_iterator it, end=toDelete.end();
for(it=toDelete.begin();it!=end;it++)
im.erase(*it);
}
IniSect.Write();
}
Senza typedef:
codice:
void MeasurementUnitsContainer::RemoveDataFromINI(INISection & IniSect)
{
IniSect.Read();
std::list< std::map<std::_tcstring,std::_tcstring,CaseInsensitive_Less>::iterator > toDelete;
std::map<std::_tcstring,std::_tcstring,CaseInsensitive_Less> & im=IniSect.GetInternalMap();
{
std::_tcstring prefix(_T("MUItem"));
std::map<std::_tcstring,std::_tcstring,CaseInsensitive_Less>::iterator it, end=im.end();
for(it=im.begin();it!=end;it++)
{
if(it->first.compare(0,prefix.size(),prefix)==0)
toDelete.push_back(it);
}
}
{
std::list< std::map<std::_tcstring,std::_tcstring,CaseInsensitive_Less>::iterator >::const_iterator it, end=toDelete.end();
for(it=toDelete.begin();it!=end;it++)
im.erase(*it);
}
IniSect.Write();
}
Immagina poi senza typedef che gioia se dovessi cambiare il tipo di INISection::ISMap...