Отправляет email-рассылки с помощью сервиса Sendsay

Программирование. Форум !!!

За 2006-05-28

Re: Как получить указатель на функцию-метод класса

> но выдается ошибкаа строке f(f1):
> error C2664: 'f' : cannot convert parameter 1 from 'void (void)' to 'void (__cdecl*)(void)'
> None of the functions with this name in scope match the target type
>
> как не пытался изменять код - ничего не помогает.
> странно, неужели указатели на функции не работают в классах ?
>
Почему же не работают. Замечательно работают.

Но из-за особенностей функций-членов классов
используется специальный синтаксис:

class A {

typedef void (A::*pfunction)();

public:
void f1() {
}

void f(pfunction p) {
(this->*p)();
}

void fff() {
f(f1);
}
};

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

Номер выпуска : 5317
Возраст листа : 980 (дней)
Количество подписчиков : 617
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/554693
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2006-05-28 16:44:30 (#554693)

Re: Как получить указатель на функцию-метод класса

по-моему на rsdn есть статья "Указатели на функции-члены и реализация
самых быстрых делегатов на С++".

Номер выпуска : 5316
Возраст листа : 980 (дней)
Количество подписчиков : 617
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/554586
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2006-05-28 09:40:55 (#554586)

Как получить указатель на функцию-метод класса

Приветствую, All !
Возникла такая проблема.
Хочу из одного метода некоторого класса вызывать некоторые
другие методы этого класса через указатель.
Для функций определяемых глобально это работает:

typedef void (* pfunction)();

void f1()
{
}

void f(pfunction)
{
pfunction();
}

void fff()
{
f(f1);
}

Если вызвать функцию fff, то вызовется f и f1.
Этот код я частично списал, честно признаюсь.
Пытаюсь модифицировать его, сделав все эти функции
членами класса:

class A
{

public:

void f1()
{
}

void f(pfunction)
{
pfunction();
}

void fff()
{
f(f1);
}
};

но выдается ошибкаа строке f(f1):
error C2664: 'f' : cannot convert parameter 1 from 'void (void)' to 'void (__cdecl
*)(void)'
None of the functions with this name in scope match the target type

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

Номер выпуска : 5315
Возраст листа : 980 (дней)
Количество подписчиков : 617
Адрес в архиве : http://subscribe.ru/archive/comp.soft.prog.prog/msg/554547
Получить правила : mailto:comp.soft.prog.prog-rules@subscribe.ru
Формат "дайджест" : mailto:comp.soft.prog.prog-digest@subscribe.ru
Формат "каждое письмо" : mailto:comp.soft.prog.prog-normal@subscribe.ru
Формат "читать с веба" : mailto:comp.soft.prog.prog-webonly@subscribe.ru

   2006-05-28 05:28:07 (#554547)