Я понимаю, что есть много похожих вопросов, но я не мог найти решение, которое решает мою проблему (читайте: я не понял по-настоящему ответы, чтобы я мог применить его в моем случае)templated function с аргументом, который является шаблоном класса
у меня есть следующие функции:
void printVariable(map<string, bool*>::iterator it)
{
cout << it->first << " " << *(it->second) << endl;
}
Теперь если у меня есть map<string, bool*> mapping
я могу сделать следующее: printVariable(mapping.begin());
Это работает, теперь у меня есть аа map<string, int*>
и хочу быть в состоянии сделать то же самое, поэтому я решил изменить printVariable функции:
template <typename T>
void printVariable(map<string, T*>::iterator it)
{
cout << it->first << " " << *(it->second) << endl;
}
Однако это дает ошибку компиляции (ССАГПЗ):
error: variable or field 'printVariable' declared void
error: expected ')' before 'it'
Я думаю, я могу обойти эту проблему довольно легко при перегрузке функции. Но я хотел бы знать, почему это не работает.
Edit2: удален текст претендуя на правильном решение было неправильным
Нужно добавить спецификатор typename к параметру, поскольку итератор является зависимым типом в типе шаблона? 'void printVariable (typename map :: iterator it)' –