Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Вызов функции по указателю


Автор: Andrey44 19.12.2007, 11:11
Всем добрый день.
Такой вопрос  - я помещаю в мапу CRect и PVOID - указатель на функцию класса.

Потом при проверке попадания мыши в даный рект мне надо вызвать функцию по-указателю.
Как это сделать?
Если надо кусок кода - скажите.

Автор: chipset 19.12.2007, 11:14
1. Что такое many? понял.

2. mem_fun_ptr тебе поможет. 

Автор: Andrey44 19.12.2007, 11:39
Напишу подробнее.
Код

map<CRect, PVOID> _mapButton;
CRect rect;
GetClientRect(&rect);

_mapButton.clear();
void (CMyDlg::*Open)() = &CMyDlg::OnBnClickedButtonOpen;
_mapButton[CRect(0, rect.Height()-30, 80, rect.Height())] = (void*)&Open;

void (CMyDlg::*Close)() = &CMyDlg::OnBnClickedButtonClose;
_mapButton[CRect(80, rect.Height()-30, 160, rect.Height())] = (void*)&Close;

//потом при нажатии левой кнопки мыши на окне

void CMyDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
    map<CRect, PVOID>::const_iterator iter;
    for (iter = _mapButton.begin(); iter != _mapButton.end(); iter++)
    {
        if(iter->first.PtInRect(point))
            void (CMyDlg::*temp)() = iter->second;// как тут вызвать нужную функцию?
    }

    CDialog::OnLButtonUp(nFlags, point);
}


Пожалуйста подскажите smile 

Автор: Alek86 19.12.2007, 11:57
mem_fun_ptr тебе не подходит?

Добавлено через 48 секунд
есть еще boost::bind...
вроде, то, что доктор прописал

Автор: Andrey44 19.12.2007, 12:16
Если можно покажите это в коде.
Сейчас не могу попробовать.

Автор: Alek86 19.12.2007, 12:52
думаю, пример кода можно и самому в инете поискать.

Автор: Andrey44 19.12.2007, 17:13
Спасибо за помощь - разобрался сам.
Все получилось намного проще smile 

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