2010-04-14 2 views
4

У меня есть проект с GUI (написанный в QT) и версия командной строки. Я использовал класс прямоугольников, включенный в QT: QRect. Я хотел бы разорвать зависимость версии командной строки от QT, поэтому мне нужен класс прямоугольника drop-in, который поддерживает пересечение и объединение. Я мог бы написать один, но я бы предпочел включить его, если это было возможно.standard rectangle class

Любые идеи?

+0

О, Господи, почему ты теряешь сон над этим? Эта лишняя сотня байт виртуальной памяти, которую вы будете потреблять, - это что-то * I * не заметит. Сделайте это реальным вопросом, покажите нам, как это приятно. –

+1

Qt - довольно тяжелая зависимость для чего-то, для которого нужен только класс прямоугольника. И что значит «называть это» в любом случае ... –

+0

Написание пересечения и объединение для прямоугольников - это стандартный вопрос интервью, который я задаю. Напишите свои собственные и станьте лучшим человеком для этого. –

ответ

0

Если вы собираетесь найти его, это, вероятно, часть другой зависимости. Поэтому лучше всего попытаться написать свое собственное. Сейчас самое время практиковать создание класса шаблонов. :)

template <typename T> 
struct point 
{ 
    // or maybe you'd prefer to make these private 
    T x; 
    T y; 
}; 

template <typename T> 
struct rectangle 
{ 
public: 
    typedef point<T> point_type; 

    bool contains(const point_type& pPoint) 
    { 
     return !(pPoint.x < topleft.x) && (pPoint.x < bottomright.x) && 
       !(pPoint.y < topleft.y) && (pPoint.y < bottomright.y); 
    } 

    T width(void) const 
    { 
     return bottomright.x - topleft.x; 
    } 

    // and more stuff 

    // or maybe you'd prefer to make these private, nor 
    // is this the only way to represent a rectangle. 
    point_type topleft; 
    point_type bottomright; 
}; 

Жаль, что это не тот ответ, которого вы ожидаете.


Просто о вашем дизайне, я надеюсь, что вы не принимая версию графического интерфейса пользователя, выполняя копию, а затем изменить его в консольной версии. Лучше было бы сделать библиотеку; то GUI и консоль - это просто вопрос презентации.

+0

Это прекрасно, спасибо, что начал его (замечательное внимание к граничным случаям, кстати.) В любом случае, это стоило того, чтобы спросить. Меньшие вещи заставили его подтолкнуть. Надеюсь, это тоже попадет .... –