Какая концепция C ++ лучше подходит для моделирования запросов к базе данных - потока или итератора ввода? - PullRequest
2 голосов
/ 10 января 2012

Я хотел бы рассматривать запрос к базе данных как стандартный итератор ввода C ++.С другой стороны, можно просмотреть запрос к базе данных как входной поток элементов результатов запроса.Как вы думаете, что является лучшей моделью для запроса базы данных - входной итератор или входной поток?

Лично у меня сложилось впечатление, что потоки ввода-вывода C ++ должны работать только с символами, где я никогда не видел ни одного примера потока, где символы были бы чем-то отличным от char или wchar_t.Я понимаю, что шаблонная природа потоков позволяет мне передавать что-либо как символ, поэтому теоретически кажется, что я могу рассматривать элемент результата запроса как символ для потоковой передачи, но я не уверен, что этохорошая идея.

Советы приветствуются.

Спасибо.

1 Ответ

6 голосов
/ 10 января 2012

Все, что вы используете в качестве типа символа потока, должно иметь черты характера и, возможно, что-то, связанное с локалями, поскольку кто-то может попытаться вставить локаль в ваш поток. Это может быть чепухой, но она по-прежнему присутствует в интерфейсе, и даже если вы допустите ошибку, вам, вероятно, понадобится сделать разумную ошибку.

Я бы определенно использовал итератор ввода, в C ++ это простая модель для последовательности объектов.

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

Тот факт, что существует istream_iterator, является доказательством того, что даже если вы предлагаете кому-то поток, он вполне может предпочесть / нуждаться в интерфейсе итератора.

...