Я хотел бы знать, существует ли общий способ представления высокоуровневых спископодобных объектов в C++, отличный от использования итераторов STL. (под высокоуровневым я подразумеваю некоторые сложные объекты, скажем, ответ базы данных, а не низкоуровневый вектор). Вероятно, что-то похожее на IEnumerable в С#. Если вы видели какие-либо проекты, использующие это, не могли бы вы дать мне ссылку? Спасибо.
РЕДАКТИРОВАТЬ: Разъяснение, почему меня это интересует, а не часть вопроса. Как было сказано в комментариях, вот некоторый код, объясняющий важную разницу, которую я вижу между полиморфизмом во время компиляции и во время выполнения. Представьте, что у вас есть полиморфный тип времени компиляции, что в основном означает, что у вас есть два типа, которые имеют общую концепцию (не интерфейс). Если вы хотите применить алгоритм к этому полиморфному типу, он должен быть общим:
template<class iterator>
void myalgorithm(iterator iter) {...}
Но когда у вас есть полиморфный тип времени выполнения с интерфейсом, скажем, IMyIterator
, вы можете написать на нем «обычные», необобщенные алгоритмы.
void myalgorithm(IMyIterator* iter) {...}
Большая разница в реализации этих двух функций заключается в разном уровне поддержки языка и IDE для работы с интерфейсами и универсальными типами. Другое дело, что не все так хорошо знакомы с программированием шаблонов, как, вероятно, вы. Наконец, второй случай позволяет скрыть реализацию, а первый — только заголовок. Поэтому, пожалуйста, не говорите мне, что между ними нет никакой разницы, если вы не можете показать мне, где я не прав.
IEnumerable
.IEnumerable
настолько универсален, насколько это возможно. Является ли универсальность проблемой, которую вы пытаетесь решить? - person John Dibling   schedule 01.02.2011