В текущем C ++ класс ostream_iterator был разработан следующим образом:
// excerpted from the standard C++
template<class T, ...>
class ostream_iterator
{
public:
ostream_iterator(ostream_type&);
...
ostream_iterator<T,...>& operator =(const T&);
...
};
Для меня этот дизайн неоптимален. Поскольку пользователь должен указать тип T при объявлении ostream_iterator следующим образом: ostream_iterator
Фактически, cout может принимать в качестве аргумента любой тип объекта, а не только один тип. Это очевидное ограничение.
// Below is my own version
// doesn't need any template parameter here
class ostream_iterator
{
public:
ostream_iterator(ostream_type&);
...
// define a template member function which can take any type of argument and output it
template<class T>
ostream_iterator<T,...>& operator =(const T&);
...
};
Теперь мы можем использовать его как следует:
ostream_iterator oi(cout);
Я думаю, что это более общий и более элегантный, чем
ostream_iterator<int> oi(cout);
Я прав?