Здравствуйте, Andreev, Вы писали:
A>У меня возникли сомнения: в своем проекте, который, должен возвращать по текущей позиции указателя на экране элемент, написал следующий код:
...
A> CElement& get_element( int x, int y )
A> {
A> //if ( x + length > owner->width() ) return false;
A> for ( int i = 0; i < count(); i++ )
A> {
A> if ( elements[i]->y == y && elements[i]->x <= x && elements[i]->x + elements[i]->width > x ) return *elements[i];
A> }
A> return *((CElement*)NULL);A> // Руки обрывать!
}
A> CElement& operator [] ( int index )
A> {
A> if ( index == -1 ) return *((CElement*)NULL); // Аналогично
A> else return *elements[index];
A> };
A> std::vector<CElement*> elements; // Опасно, но не критично
A>};
A>????????????????????????
A>Вопрос сводится к вызову метода get_element и оператора [] в классе CScreen. Красиво ли будет выглядеть код:
A>????????????????????????
A>CScreen& s = get_current_screen();
A>CElement& e = s.get_element( m_caret_pos.x, m_caret_pos.y );
A>if ( &e && e.type() == EL_TEXT ) // Coding Guidelines: Never Switch on Type
A>{
A> . . .
A>}
A>Спасибо за внимание.
A>
Критикуйте. (-:
Посмотреть, какие методы можно объявить константными
Возвращать, по возможности, константные ссылки
Пересмотреть архитектуру с целью избавления от if(EL_xxx == e.type())
В циклах лучше использовать итераторы
И лучше использовать умные указатели