Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > Что лучше WindowProc как статический член класса


Автор: Royan 27.3.2005, 13:18
Стоит задача - написать класс обертку (wrapper) для работы с виндовозным окном. Выскажите свои "за" и "против" по следующему вопросу. Функцию обработки сообщений окна (WindowProc) следует сделать

1) Статической и получать доступ к членам класса, например так:
Код

//...
CREATESTRUCT cs;
//...
cs.lpCreateParams = (void *)this;
//Внутри WindowProc
GetWindowLongPtr(hWnd, GWLP_USERDATA)

2) Другом класса

Всем заранее спасибо за высказанные мысли.

Автор: Coocky 27.3.2005, 21:13
Royan
А ты попробуй сделать статической smile

Автор: Coocky 27.3.2005, 21:25
Попробую привести пример смысла статической функции smile
В зависимости от назначения твоего приложения могут быть ситуации, когда объекты одного и того же класса должны совместно использовать один или несколько элементов данных.
Для совместного использования элемента класса ты должен объявить этот элемент как static,правильно?
Со статиком у нас работает кто?Правильно-статическая функция smile
Теперь прикинь будет ли у тебя переменная(ные),которая потребуется разным классам.
А так из твоего кода я ничего не понял,будет ли такие(ая) переменая....Так что тебе решать smile

Автор: Coocky 27.3.2005, 21:36
Да,забыл сказать некто Майерс,если не ошибаюсь,проводил иследование.Так вот оказалось,
что дружественные функции могут улучшать инкапсуляцию класса!
дружественная функция лежит вне области видимости класса,но она фактически является элементом его интерфейса.

Автор: Royan 28.3.2005, 16:14
2Coocky Я не случайно спросил, сейчас у меня все работает при статической WindowProc
А где случаем не помнишь ты Майерса читал?

Автор: chipset 28.3.2005, 20:28
А в чём проблема поместить функцию в небольшой функтор чтобы не терять связи с классом?

Цитата(Royan @ 28.3.2005, 05:14)
А где случаем не помнишь ты Майерса читал?

Effective C++
Effective STL
http://forum.vingrad.ru/index.php?showtopic=33456, #6 и #16.
Класные кстати книги.

Автор: Coocky 28.3.2005, 21:39
chipset
Цитата
А в чём проблема поместить функцию в небольшой функтор чтобы не терять связи с классом?

Чип а можно без ругательств.Переведи,плиз smile

Автор: chipset 28.3.2005, 21:41
Цитата(Coocky @ 28.3.2005, 10:39)
Чип а можно без ругательств.Переведи,плиз smile

Фигня такая, чтобы передавать указатели на отдельные методы классов, передается линк на обьект класса который будет заюзывать функция.
Таким образом можно передавать статической функции линку на обьект класса, чтобы она его использовала вместо this.

Автор: Coocky 28.3.2005, 21:45
chipset
Еще раз повторяю-чел создает свой класс.класс глобальный и обьемный.Нет большого смысла в статике.Есть больший смысл в дружественной функции.
Цитата
Таким образом можно передавать статической функции линку на класс, чтобы она его использовала вместо this.

Приведи мне смысл этого для примера Royan_а smile
Дружище-это не спор,это попытка получить истину.Парень правильно задал вопрос.Действительно при разработке ООП мы мало уделяем мелочам.Удобности и универсальности....
Добавлено @ 21:47
Цитата
Стоит задача - написать класс обертку (wrapper) для работы с виндовозным окном

А это уже почти самый верх иерархии smile

Автор: chipset 28.3.2005, 22:16
Тогда я целиком за статическую функцию. Должно быть как можно меньше функций не в классах.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)