Играя с шаблонами, я реализовал этот для итераций массивов:
template<class T, size_t size>
void iterate(T(&arr)[size], void(*fn)(T&)) {
for(size_t i=0; i<size; ++i) fn(arr[i]);
}
Так что я мог бы повторять массивы, как это
void printn(int& n) {
printf("%d\n",n);
}
int a[] = {3,-4,6,2};
iterate(a,printn);
Затем я понял, что мне также нужен константный итератор, поэтому первая плохая идея была в коде
template<class T, class U, size_t size>
void iterate(T(&arr)[size], void(*fn)(U&)) {
for(size_t i=0; i<size; ++i) fn(arr[i]);
}
Я знаю, что это плохо, но мне интересно, почему это поведение:
void printn(int& n); // works
void printn(const int& n); // also works
void printn(short& n); // type mismatch
void printn(const short& n); // works
Существует также проблема с лямбдами:
iterate(a,[](int& n) { printf("%d\n",n); }); // type mismatch
Так что вопрос Почему несоответствия типов и как их решить?
Я использую 32-битную MinGW 4.8.1 с -std=C++11
вариант.
Задача ещё не решена.