Мне нужно исправить некоторые ошибки в моем старом проекте, и я подумал, что это идеальная возможность для рефакторинга некоторого кода.
У меня есть карта следующей структуры:
std::map< std::string, std::map<std::string, myClass*> > ComponentMap;
Где-то мне нужно перебрать некоторые базовые подкарты, и я использовал следующее:
for (std::map<std::string, myClass* >::iterator iter = ComponentMap[compNameString].begin(); iter != ComponentMap[compNameString].end(); ++iter)
{
//some code
if (IsComponentOfType(iter, sCOMP_PRINCIPAL))
iter->second->GetComponentValue(date, compName, 00);
//some more code
}
Функция IsComponentOfType имеет следующее объявление:
bool IsComponentOfType(const std::map<std::string, myClass* >::iterator & MapIter, const sCOMPONENT_TYPE & Type)
Мой вопрос:
Когда я переписал цикл for следующим образом:
for (auto const& iter: ComponentMap[compNameString])
Я получил следующую ошибку компиляции:
IsComponentOfType(const std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const _Kty,_Ty>>>> &,const sCOMPONENT_TYPE &)': cannot convert argument 1 from 'const std::pair<const _Kty,_Ty>' to 'const std::_Tree_iterator<std::_Tree_val<std::_Tree_simple_types<std::pair<const _Kty,_Ty>>>> &'
Какого типа мне нужно переписать первый аргумент функции, чтобы "заставить" работать синтаксис c ++ 11?