Форум программистов, компьютерный форум CyberForum.ru

Перегрузка квадртных скобок [] - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Trydorg
1 / 1 / 0
Регистрация: 23.03.2011
Сообщений: 25
25.09.2011, 21:40     Перегрузка квадртных скобок [] #1
Мое почтение, уважаемые форумчане!
Столкнулся с неразрешимой проблемой в ходе написания шаблонного массива-контейнера.
Перегружаю квадратные скобки следующим образом:
C++
1
2
3
4
template<typename T, int startSize> T& Array<T, startSize>::operator [] (int index)
{
    return elements[index];
}
Все хорошо. Но как быть с ситуацией, когда на той неведомой стороне, где будет использоваться мой массив, индекс случайно выйдет за границы позволенного? Проверку в оператор я могу вставить, но как решить вопрос с возвращаемым ею значением, которое должно быть скорее bool, нежели некое T&?
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2011, 21:40     Перегрузка квадртных скобок []
Посмотрите здесь:

C++ Баланс скобок
C++ Балланс скобок
Баланс скобок C++
Выражения из скобок C++
Баланс скобок C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
emilen
10 / 10 / 0
Регистрация: 25.05.2010
Сообщений: 52
25.09.2011, 21:47     Перегрузка квадртных скобок [] #2
Обычно в перегрузке оператора [] этого не делают, а делают специальный метод at, который проверяет выход за границы выделенной памяти для контейнера. Оператор [] у вас выглядит правильно . При выходи за пределы в методе at вызовите исключение (throw). Так сделано в STL.
Trydorg
1 / 1 / 0
Регистрация: 23.03.2011
Сообщений: 25
25.09.2011, 21:57  [ТС]     Перегрузка квадртных скобок [] #3
emilen, спасибо.
Проверил на vector, реально падает при вызове оператора с индексом за границами выделенной памяти.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
25.09.2011, 22:38     Перегрузка квадртных скобок [] #4
Цитата Сообщение от Trydorg Посмотреть сообщение
C++
1
int startSize
C++
1
std::size_t startSize
Цитата Сообщение от Trydorg Посмотреть сообщение
C++
1
int index
аналогично
C++
1
std::size_t index
Добавлено через 6 минут
Что такое size_t и ptrdiff_t
Yandex
Объявления
25.09.2011, 22:38     Перегрузка квадртных скобок []
Ответ Создать тему
Опции темы

Текущее время: 22:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru