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. |
|
|