Re: Диапазон итераторов.
От: MaximE Великобритания  
Дата: 01.12.04 20:01
Оценка: +1
sergey_shandar wrote:

> Как продолжение обсуждения темы о паре begin(), end() в связи с появлением в boost диапазона итераторов boost::iterator_range.

>
> У меня есть свои попытки реализовать нечто подобное (старую версию можно найти здесь
Автор: sergey_shandar
Дата: 28.08.04
, а новую в CVS на SourceForge). Так вот, посмотрел на boost::iterator_range, вроде все хорошо. Но, есть некоторые вопросы.

>
> 1. Прошу обратить внимание на boost::end(), на строчку s + sz — 1 if X is Char[sz]. Для меня это немного странно, т.е. получаеться
>
>
>     char A[5];
>     boost::end(A) == A + 4; /// true???
>     boost::size(A) == 4; /// true, правильно понял?
>     int B[5];
>     boost::end(B) == B + 5; /// true
>     boost::size(B) == 5; /// true
>

>
> По моему, это совершенно неправильно. Массивы трогать нельзя, даже ради строк "...", L"...". Если нужны строки заканчивающиеся нулями, то можно испольвать какие нибудь оболочки, например:
>
>
>     char A[] = "Hello world!";
>     boost::end(make_stringz(A)) == 4;
>

>
> Интересно ваше мнение.

Согласен.

В моем коде на константные строковые литералы я почти всегда ссылаюсь через char const*, а char[] использую только для буферов. Эти буфера практически никогда не заполнены строкой "под завязку", т.е. определение длины строки лишь по размеру буфера не дает правильный результат. Я детально не рассматривал эту либу и доки ее не читал, но мне кажется, что такое решение скорее добавит больше ошибок чем удобства.

> поля m_Begin и m_End сделаны недоступными из вне. Вопрос: а зачем? По моему, было бы очень даже удобно использовать такие поля, например так:


[]

Видимо потому, что iterator_range<> предоставляет обобщенный интерфейс container или его подмножество из §23.1.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9 delta
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.