Я хотел бы узнать, существует ли общий способ представления объектов на уровне высокого уровня в C++, , кроме использования итераторов STL. (на высоком уровне я имею в виду некоторые сложные объекты, скажем, ответ базы данных, в отличие от вектора низкого уровня). Вероятно, что-то похожее на IEnumerable C#. Если вы видели какие-либо проекты, используя это, не могли бы вы дать мне ссылку? Благодарю.IEnumerable в C++?
EDIT: Уточнение, почему меня это интересует, а не часть вопроса. Как указано в комментариях, вот какой-то код, объясняющий решающее различие, которое я вижу между полиморфизмом времени компиляции и временем выполнения. Представьте, что у вас есть полиморфный тип времени компиляции, что в основном означает, что у вас есть два типа, которые имеют общую концепцию (не интерфейс). Если вы хотите применить алгоритм этого полиморфного типа, он будет иметь порождающие:
template<class iterator>
void myalgorithm(iterator iter) {...}
Но когда у вас есть время выполнения полиморфного типа с интерфейсом, скажет IMyIterator
, вы можете написать «нормальные », нетипичные алгоритмы на нем
void myalgorithm(IMyIterator* iter) {...}
Большая разница в реализации этих двух функций разного уровня языка и поддержки IDE работы с интерфейсами против общих типов. Другое дело, что не все знакомы с программированием шаблонов, как, вероятно, вы. Наконец, второй случай позволяет скрыть реализацию, в то время как первая - только для заголовка. Поэтому, пожалуйста, не говорите мне, что между ними нет никакой разницы, если вы не сможете показать мне, где я ошибаюсь.
Есть ли какая-то особая причина, по которой вы не обращаетесь к итераторам STL? Или это просто из любопытства? – templatetypedef
В управляемом C++, да (это тот же интерфейс, который вы видите на C# и VB.Net). В стандартном C++ нет (и вам лучше использовать другой язык для обработки операций с базой данных). –
@templatetypedef: Оба. Если вас действительно интересует, почему, см. * Lots * моих комментариев там: http://stackoverflow.com/questions/4852658/polymorphic-iterators-in-c –