Сравнить / Копировать COORD struct;перегрузка - PullRequest
0 голосов
/ 02 марта 2011

Это кажется тривиальным, но бесконечный поиск не дает ответа.

Мне нужно сравнить и назначить.

Как я могу перегрузить COORD, если я не могу добавить функцию-член или функцию-друга?

это просто плохой стиль для использования этой структуры на основе окон?

Кроме того, я знаю, что могу написать свой собственный класс (или просто выполнить операцию один раз для каждого члена), но эта проблема просто заставляет меня задуматься.

Ответы [ 2 ]

3 голосов
/ 02 марта 2011

COORD имеет только открытых членов, поэтому нет необходимости в функциях друзей - должно хватить свободных операторов:

bool operator <(COORD const& lhs, COORD const& rhs)
{
    return lhs.Y < rhs.Y || lhs.Y == rhs.Y && lhs.X < rhs.X;
}

bool operator ==(COORD const& lhs, COORD const& rhs)
{
    return lhs.X == rhs.X && lhs.Y == rhs.Y;
}

COORD имеет неявную копию c'tor и operator= уже нет необходимости определять их.

1 голос
/ 02 марта 2011

Почему бы не получить свой класс из public COORD и добавить необходимые операторы? struct в C ++ - это то же самое, что и class, за исключением того, что по умолчанию все члены public.

struct MyCoord : public COORD
{
  // I like to have a typedef at the beginning like this
  typedef COORD Inherited;
  // add ctor, if you like ...
  MyCoord(SHORT x, SHORT y)
    : Inherited::X(x)
    , Inherited::Y(y)
  { }
  // no need for copy ctor because it's actually POD (plain old data)

  // Compatibility ... ;)
  operator COORD&()
  {
      return *this; // may need cast
  }

  COORD* operator&()
  {
     return this; // may need cast
  }
  // declare friends ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...