К> Базовая библиотека геометрии, всё просто и понятно, пастораль и идиллия...
согласно педивикии пастораль выглядит так: https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D1%81%D1%82%D0%BE%D1%80%D0%B0%D0%BB%D1%8C#/media/File:Fiesta_campestre.jpg
так что все нормально
К> constexpr Rect(int x, int y, int width, int height) К> constexpr Insets() : top_(0), left_(0), bottom_(0), right_(0) {}
Вместо x/y/width/height стали юзать top/left/bottom/right? Порядок аргументов придает особую пикантность.
Как много веселых ребят, и все делают велосипед...
O>>вместо x/y/width/height стали юзать left/top/right/bottom? К>вместо x/y стали юзать TOP / LEFT. К>а вместо width/height — vertical/horizontal, соответственно
да перевернутый порядок я позже приметил и подредактировал мессагу
Как много веселых ребят, и все делают велосипед...
Здравствуйте, IID, Вы писали:
IID>Длинный (в символах) список инициализации порезали по строкам. А короткий не порезали. IID>Неаккуратненько ?
особенности хромовского стайлгайда (макс. 80 символов в строке), плюс неудачно длинные идентификаторы аргументов.
это неважно, важно — какие там аргументы.
Здравствуйте, Кодт, Вы писали:
O>>вместо x/y/width/height стали юзать left/top/right/bottom? К>вместо x/y стали юзать TOP / LEFT. К>а вместо width/height — vertical/horizontal, соответственно
Так это ж insets, у них ну ладно ещё x/y (вместо left/top, а что писать вместо right/bottom?), но width/height у них точно нет.
Николай, не очень понял
Разные классы, разные свойства, названия тоже разные, вполне отражающие смысл.
Здравствуйте, Кодт, Вы писали:
К>Уважаемые знатоки! Как вы думаете, почему я обратил на это внимание?
Ни разу не знаток, но попробую:
0. Зачем Insets? У него какие-то отличные от Rect свойства есть?
1. Не последовательное применение explicit
2. У Insets нет конструктора который принимает Point, Rect.
3. Дефолтный конструктор Rect не инициализирует переменные, а Point, Size и Insets — инициализирует нулями.
Здравствуйте, Skorodum, Вы писали:
К>>Уважаемые знатоки! Как вы думаете, почему я обратил на это внимание? S>0. Зачем Insets? У него какие-то отличные от Rect свойства есть?
Примерно все. Два можно притянуть за уши к x и y у rect'а.
S>2. У Insets нет конструктора который принимает Point, Rect.
Каков физический (в данном случае — геометрический) смысл такого конструктора?
S>3. Дефолтный конструктор Rect не инициализирует переменные, а Point, Size и Insets — инициализирует нулями.
Rect состоит из Point и Size — для них вызываются дефолтные конструкторы.
Здравствуйте, Dair, Вы писали:
D>Примерно все. Два можно притянуть за уши к x и y у rect'а.
Понял уже, и имена параметров вполне преднамеренно сделаны такими.
S>>2. У Insets нет конструктора который принимает Point, Rect. D>Каков физический (в данном случае — геометрический) смысл такого конструктора?
Ну я это написал под впечатлением комментария Кодта
, теперь думаю, что он немного неправильно понял смысл класса Insets.
S>>3. Дефолтный конструктор Rect не инициализирует переменные, а Point, Size и Insets — инициализирует нулями. D>Rect состоит из Point и Size — для них вызываются дефолтные конструкторы.
Если так, то согласен, но этого не видно по приведенному коду.
D>Так это ж insets, у них ну ладно ещё x/y (вместо left/top, а что писать вместо right/bottom?), но width/height у них точно нет. D>Николай, не очень понял
Основной прикол в том что ордината идете впереди абсцисс, пардон май френч.
constexpr Insets(int top, int left, int bottom, int right)
Как много веселых ребят, и все делают велосипед...
Здравствуйте, Кодт, Вы писали:
К>Уважаемые знатоки! Как вы думаете, почему я обратил на это внимание?
//
// An insets represents the borders of a container (the space the container must
// leave at each of its edges).
//
Единственная странность, это то, что у них порядок не как в CSS (top, right, bottom, left), а совсем наоборот. Может им так удобнее, но в общем он не имеет значения для структуры, которая описывает insets.
Здравствуйте, Skorodum, Вы писали:
S>Там скорее всего top, left, bottom, right — это смещения, которые будут применены к какой-то центральной точке. Тогда все выглядит логично
Здравствуйте, Dair, Вы писали:
D>Разные классы, разные свойства, названия тоже разные, вполне отражающие смысл.
Insets — это прямоугольник наоборот. Пачка координат для описания отступов от края прямоугольника.
И эти классы все взаимодействуют, а не просто так лежат в одной папке.
class Rect {
. . .
// Shrink the rectangle by the given insets.void Inset(const Insets& insets);
// Shrink the rectangle by the specified amount on each side.void Inset(int left, int top, int right, int bottom);
// Move the rectangle by a horizontal and vertical distance.void Offset(int horizontal, int vertical);
void Offset(const Vector2d& distance) { Offset(distance.x(), distance.y()); }
void operator+=(const Vector2d& offset);
void operator-=(const Vector2d& offset);
Insets InsetsFrom(const Rect& inner) const;
. . .
Как видно, во второй сигнатуре аргументы идут в естественном порядке.
Там ещё есть класс смещений, Vector2D, — чтобы случайно не смешивать вектор точки, вектор размера и вектор смещения.
К>Как видно, во второй сигнатуре аргументы идут в естественном порядке.
Я так подозреваю оно и с Inset юзается во многих местах в естественном порядке. В конце концов это лишь названия переменных) Буду удивлен если это не так..
Как много веселых ребят, и все делают велосипед...
К>>Уважаемые знатоки! Как вы думаете, почему я обратил на это внимание? С>Потому что шутки на С++ доступны только Кодту. Остальные такого уровня просветления не достигли.
Остальным доступен лишь пошлый юмор про то как во время секса приезжает сборщик мусора и требут выкинуть презерватив..
Как много веселых ребят, и все делают велосипед...