Я реализую пример из книги «A Tour of C++» Бьярна Страуструпа. У меня есть шаблон функция для вычисления суммы элементов (скопированную из книги):диапазон для цикла с проблемой контейнера const
template<typename Container, typename Value>
Value sum(const Container& c, Value v)
{
for (auto x : c)
v+=x;
return v;
}
Я хочу, чтобы применить его к шаблону классу Vector (определенный в книге), которая имеет «начало» и «конец "функции для поддержки диапазона-за цикл (копируется из книги):
template<typename T>
T∗ begin(Vector<T>& x)
{
return x.size() ? &x[0] : nullptr;
}
template<typename T>
T∗ end(Vector<T>& x)
{
return begin(x)+x.size();
}
при применении к Vector, например:
Vector<int> v={1,2,3,4};
int s=sum(v, 0);
это приводит к ошибке компиляции. Однако, когда я удаляю const из функции шаблона суммы
template<typename Container, typename Value>
Value sum(Container& c, Value v)
скомпилирован.
1 - Почему это не сработало с "const"? Если это проблема с реализацией «begin», «end», как их реализовать?
Это работает! Спасибо! Это отсутствует в книге и должно быть добавлено к ошибкам. – adel