Я новичок в программировании на C/C++, но я программирую на С# уже 1,5 года. Мне нравится С#, и мне нравится класс List, поэтому я подумал о создании класса List в C++ в качестве упражнения.
List<int> ls;
int whatever = 123;
ls.Add(1);
ls.Add(235445);
ls.Add(whatever);
Реализация похожа на любой класс Array List. У меня есть элемент T* vector
котором я храню элементы, и когда это хранилище собирается быть полностью заполненным, я изменяю его размер.
Пожалуйста, обратите внимание, что это не должно использоваться в производстве, это всего лишь упражнение. Я хорошо знаю vector<T>
и друзей.
Теперь я хочу просмотреть элементы моего списка. Я не люблю использовать for(int i=0;i<n; i==)
. Я напечатал for
в Visual Studio, ожидаемый для Intellisense, и он предложил мне это:
for each (object var in collection_to_loop)
{
}
Это очевидно не будет работать с моей реализацией List. Я подумал, что мог бы сделать немного магии, но это похоже на огромный взлом. На самом деле, больше всего меня беспокоит передача такого типа:
#define foreach(type, var, list)\
int _i_ = 0;\
##type var;\
for (_i_ = 0, var=list[_i_]; _i_<list.Length();_i_++,var=list[_i_])
foreach(int,i,ls){
doWork(i);
}
Мой вопрос: есть ли способ заставить этот пользовательский класс List работать с циклом, foreach-like
?