Я только запускаю свою собственную оболочку Windows API и столкнулся с незнакомой темой, переписывая структуру для включения функций C ++.
Я переворачиваю это:
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT;
в
#define RECT_POS 1
#define RECT_SIZE 2
typedef struct WrapperRect // RECT
{
WrapperRect(); // all 0
WrapperRect (const double, const double, const double, const double, bool = RECT_POS); // initalize with tl pos and either br pos or size
bool set (const double, const double, const double, const double, bool = RECT_POS); // set tl pos and either br pos or size
bool pos (const double, const double); // set tl pos
bool size (const double, const double); // set size
WrapperRect & operator= (const WrapperRect &); // assign another rect
bool operator== (const WrapperRect &); // check for equality (pos+size)
bool operator!= (const WrapperRect &); // check for inequality (pos+size)
bool operator> (const WrapperRect &); // check for tl pos greater
bool operator< (const WrapperRect &); // check for tl pos less
bool operator>= (const WrapperRect &); // check for tl pos greater equal
bool operator<= (const WrapperRect &); // check for tl pos less equal
WrapperRect & operator+ (const POINT &); // move down/right
WrapperRect & operator- (const POINT &); // move up/left
WrapperRect & operator+= (const POINT &); // move down/right
WrapperRect & operator-= (const POINT &); // move up/left
double l, left, x; // left
double r, right; // right
double t, top, y; // top
double b, bottom; // bottom
double w, width; // width
double h, height; // height
} Rect, rect; // allow more convenient names
Моя единственная проблема заключается в том, что если пользователь скажет
Rect myRect;
myRect.right = 50;
, он установит правую сторону, но не сможет изменить псевдонимы дляправая сторона или ширина.
Я не хочу, чтобы члены были приватными, потому что мне нужен синтаксис
cout << myRect.x;
, а не надоедливый
cout << myRect.getX();
синтаксис.
Есть ли способ достичь этого или я должен использовать функции get?
edit:
Я действительно не думал, когда писал это, я добавил некоторую отдачузначения (>.>) и изменили удвоение в операторе + и т.д. до точки.Я начинаю пробовать возможности, прежде чем принять один.