Аннотация:
Small Windows Library – это экспериментальная оконная библиотека вокруг win32. Особой практической ценности она не представляет ввиду неизбежности ухода win32 со сцены, но тем не менее иллюстрирует еще один способ организации оконной библиотеки. Она предназначена показать красоту С++ и убожество win32.
Отличное использование шаблонов!
Кстати, показывает убожество не только Win32, но и С++. :))
Все эти приёмы должны оптимизироваться на этапе компиляции, что в С++ конечно же не происходит. :-Р
Have fun: Win+M, Ctrl+A, Enter
А каким образом она показывает убожество win32? ;)
Win32 не уйдёт!!! Это точно... Убожество? Любая библиотека основанная на API сейчас выглядит убого :) Но для Win32 это нормально и обоснованно. Так что здесь автор перестарался.
И все-таки макросы в разы лучше для карты сообщений. Учитывая, что при этом карта сообщения преобразуется макросами в конструкцию вида switch{case}, очевидно, что у компилера есть все шансы оптимизировать выборку сообщения по ID во время компиляции, что он в большинстве случаев и делает (обычно используется некоторое преобразование над аргументом switch, а далее выбирается нужный элемент массива переходов).
У вас же поиск происходит горааааааздо медленнее (более того, он похоже даже не ассоциативный):
bool Handler::call( SWL::Handler mmp[], Wnd *wnd, MsgBase *msg ) {
Handler *p = mmp;
_ASSERTE( tag_begin == p->_proxy );
if ( p->_id == tag_x )
_init( mmp );
Вывод: боюсь эта библиотека не показывает красоту С++ в полной мере (хотя бы так, как это делает ATL/WTL), и более того, показывает, что иногда макросами не стоит пренебрегать. А выражение про убогость win32 действительно смахивает на "пальцы".
У меня используется двоичный поиск в предварительено отсортированном массиве:
Handler *ph = lower_bound( hs, he, vh, _less_by_id ); — смотрите сырцы stl
это работает не намного медленне (а может и быстрее. я не проверял {это мне неинтересно})
К тому же поиск сообщения в карте/свитче это не самое узкое место в программах.
И давайте не будем разводить флейм типа SWL vs WTL, макросы vs шаблоны. Здесь показано как сделать БЕЗ макросов, другой стиль програмирования демонстрируется.
Насчет убогости win32 я уже сказал, что это мое личное отношение.
Бр... Люди — а можно немного мозгов проявить ?
для чего оптимизация message mapов ?
если в вашем диалоге больше 255 контроллов — то ни один узер им пользоваться не будет.
Если меньше — то for будет работать быстрее и занимать меньше памяти чем любые его оптимизации (i.e. map)
Но мне понравилась идея Msg<WM_CREATE>... в WTL до такого не дошли —
там вечно конверитовать надо из параметеров в хрен знает что...