C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Функция окна, метод класса как функция окна
Dima
  Отправлено: 29.07.2003, 15:46


Не зарегистрирован







Интересно как можно засунуть метод класса в WNDCLASS как функцию окна? Использование объектов-функций (функторов) не проходит
Георгий
Отправлено: 29.07.2003, 19:52


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



засунуть можно, но толку от этого будет мало:
CODE
class
{
public:
static int m(int a, int b)
 {return a+b;};
};
int f(int (*ptrf)(int,int))
{
return ptrf(1,2);
};
void main(void)
{
cout<<f(&(a.m))<<endl;
};
Аналогично и в оконную функцию передать можно метод класса, но только static`еский.
С передачей обычных методов есть такая сложность — последним (после остальных аргументов) в стек помещается адрес экземпляра класса, которому принадлежит этот метод, но если этот метод попытаться поместить в качестве оконной функции, то кто ему в стек поместит адрес экземпляра класса, которому он принадлежит? Никто т.к. Windows об этом не знает. => передать обычный (не static) метод нельзя, а у static практически нет приемуществ перед обычной функцией (да и вообще он фактически и есть функция).

Кстати что такое объекты-функции(функтора)?
Guest
Отправлено: 30.07.2003, 13:40


Не зарегистрирован







QUOTE (Георгий @ 29/07/2003, 20:54)
Кстати что такое объекты-функции(функтора)?

у Builder-а приводится такой пример
CODE

//
// Create a new function object from unary_function.
//
template<class Arg>
class factorial : public unary_function<Arg, Arg>
{
public:
  Arg operator() (const Arg& arg)
  {
     Arg a = 1;
     for (Arg i = 2; i <= arg; i++)
        a *= i;
     return a;
  }
};

в CBuilder\Examples\StdLib\funct_ob.cpp

Функторы используются для передачи параметров в алгоримах и т.д.
в STL.

Вернуться в Вопросы программирования в C++Builder