Разве Gdiplus :: Image :: GetWidth () и куча других геттеров не должны быть "const"? - PullRequest
4 голосов
/ 11 марта 2009

Почему они не постоянны?

Я считаю, что это ошибочный дизайн API. Или я что-то упустил?

UINT GetWidth();
UINT GetHeight();
...

против

UINT GetWidth() const;
UINT GetHeight() const;
...

Ответы [ 3 ]

4 голосов
/ 11 марта 2009

Дефектный дизайн API? Заголовки C ++ в стиле C? Из команд, которые привели нас CString ? Нет, не может быть ...

Серьезно, однако, не ожидайте использования GoTW -уровня C ++ в любом Win32 API или более, чем обычная оболочка вокруг дескрипторов стиля C. Херб Саттер занимался .NET: использованием C ++, а не улучшением дизайна библиотеки Microsoft. WTL настолько близок, насколько я видел, как Microsoft подошла к современному C ++ , и это привело к довольно смутному существованию.

2 голосов
/ 11 марта 2009

Трудно сказать. Я бы согласился, но, возможно, в реализации есть что-то, что мешает им быть const, и что они не хотят добавлять накладные расходы, чтобы скрыть. В настоящее время у нас есть ключевое слово <a href="/108037/imeet-li-klychevoe-slovo-mutable-kakuy-libo-tsel-krome-vozmozhnosti-izmeneniya-peremennoi-s-pomoschy-const-funktsii">mutable</a>, но я думаю, что оно моложе, чем этот API.

Или, может быть, разработчики API принадлежат к (иногда шокирующе большому, imo) сообществу разработчиков C ++, которые враждебно относятся к ключевому слову const, чувствуя, что это только усложняет использование. Я не Windows историк, поэтому я не могу вам сказать. :)

1 голос
/ 13 марта 2009

Строго говоря, вы, вероятно, правы - переменная должна быть константой.

Я предполагаю, что вы говорите о собственном API Gdiplus C ++. Если вы посмотрите на реализацию этого кода и классов Gdiplus, то обнаружите, что большая часть кода представляет собой базовую оболочку для функций API Gdiplus Flat (http://msdn.microsoft.com/en-us/library/ms533969(VS.85).aspx).. Это может затруднить создание кода. -правильно ... или (как намекает другой), что Microsoft, как правило, не очень современная C ++.

РЕДАКТИРОВАТЬ: Глядя на код для Gdiplus :: Image :: GetWidth () (в GdiPlusBitmap.h), для MS было бы легко реализовать многие функции с модификатором const. Они сделали это с помощью Image :: GetType (), и код внутри в значительной степени идентичен Image :: GetWidth (), Image :: GetHeight ().

...