Здравствуйте!
В программе есть множество всяких множеств

, мне необходимо инода
выводить их значения на консоль. Написал простую шаблонную функцию:
template<class T>
std::ostream&
operator<<(std::ostream& st, std::set<T> const& s)
{
st << '{';
for(typename std::set<T>::const_iterator i = s.begin();
i != s.end();
++i)
{
st << " " << (*i);
}
st << '}';
return st;
}
Теперь можно делать так:
set<int> si;
set<string> ss;
cout << si << ss;
// Всё работает просто на ура!
set<myClass> smc;
cout << smc;
// Работает, если для myClass определён operator<<
Недавно потребовалось хранить в множествах итераторы других контейнеров.
И вот
тут появились проблемы:
typedef vector<myclass> seq_t;
typedef seq_t::const_iterator iter_t;
typedef set<iter_t> set_of_iter_t;
// Пытаюсь вывести
set_of_iter_t s;
cout << s;
// Правильно, компилятор говорит, что operator << не определен для iter_t
Так вот, вопрос:
как написать шаблонную функцию для итераторов?
Пытаюсь сделать так:
template<class T>
std::ostream&
operator<<(std::ostream& st, std::set<T>::const_iterator i)
{
return st << *i;
}
Но компилятор не находит этот оператор; если же ввести другую функцию с
именем outiter:
template<class T>
void
outiter (std::ostream& st, std::set<T>::const_iterator i)
{
return st << *i;
}
И вызывать так (для одного элемента):
outiter(cout,
*s.begin())
,
то компилятор говорит, что не может вывести (Can't deduce) тип параметра
T.
Как правильно сделать?
--
WBR, Abulafia
Posted via RSDN NNTP Server 2.0