Все, что вы используете в качестве типа символа потока, должно иметь черты характера и, возможно, что-то, связанное с локалями, поскольку кто-то может попытаться вставить локаль в ваш поток. Это может быть чепухой, но она по-прежнему присутствует в интерфейсе, и даже если вы допустите ошибку, вам, вероятно, понадобится сделать разумную ошибку.
Я бы определенно использовал итератор ввода, в C ++ это простая модель для последовательности объектов.
Потоки делают много других вещей, а также просто представляют последовательность (форматирование, управление streambuf, модель состояния загадочной ошибки). Многое из этого, вероятно, не относится к вашим элементам базы данных, хотя я полагаю, что некоторые из них могут быть. Например, имеет смысл контролировать размер буфера потока результатов запроса к БД, но отформатированные чтения из него не будут.
Тот факт, что существует istream_iterator
, является доказательством того, что даже если вы предлагаете кому-то поток, он вполне может предпочесть / нуждаться в интерфейсе итератора.