Посмотрите на шаблон функции:
template<T>
void print(typename C<T>::iterator & start, typename C<T>::iterator & end);
И ваше использование:
print(ic.begin(), ic.end());
Итак, проблема в том, что T
не может быть выведено из аргумента функции.Стандарт называет это не выводимым контекстом .Здесь я подробно объяснил аналогичный вопрос, прочитайте это:
Теперь вопрос в том,как бы вы реализовали шаблон функции?Итак, вот одно хорошее решение:
template <class FwdIterator>
void print(FwdIterator start, FwdIterator end)
{
for ( ; start != end; ++start)
{
std::cout << *start << '\n';
}
}
Если вы передадите третий аргумент как:
template <class FwdIterator>
void print(FwdIterator start, FwdIterator end, std::ostream &out)
{
for ( ; start != end; ++start)
{
out << *start << '\n';
}
}
, то вы также можете использовать его для печати в файл:
print(ic.begin(), ic.end(), std::cout); //print to console
std::ofstream file("file.txt")
print(ic.begin(), ic.end(), file); //print to file