Russian Qt Forum

Программирование => Общий => Тема начата: VozaMFC от Январь 16, 2012, 14:50



Название: Решено: массив указателей на функции
Отправлено: VozaMFC от Январь 16, 2012, 14:50
ОООчень хочеться такой массив.
Вроде бы и связал функции в массиве, а вызвать не могу:

.cpp:14: error: must use '.*' or '->*' to call pointer-to-member function in 'func2 (...)', e.g. '(... ->* func2) (...)'

Создал мап членом класса
Код:
QMap<int, void (MainWindow::*)(int)>arrFunc; // на фукции которые принимают в параметр инт, например
у классе создал фукцию
Код:
void MainWindow::testInt(int a) { a = 12; }
в конструкторе класса MainWindow заполняю массив(карту функций так сказать) функций:
Код:
void (MainWindow::*funcInt)(int) = &MainWindow::testInt; // получаю как бы вроде указатель на фунцию
arrFunc[1] = funcInt;                                                    // тут буду хранить мои функции
//funcInt(12); // а как же ими пользоваться?? Если при компиляции компилятор выше  ругаеться...


Название: Re: массив указателей на функции
Отправлено: mutineer от Январь 16, 2012, 14:52
Для вызова функции-члена через указатель на функцию нужен объект соответствующего класса

Либо сделай функцию статичной


Название: Re: массив указателей на функции
Отправлено: kambala от Январь 16, 2012, 14:55
вызывать методы надо через (this->*funcInt)(12). и такие сложные типы лучше объявлять через typedef:
Код
C++ (Qt)
typedef void (MainWindow::*MyCoolMethod)(int);
 
MyCoolMethod funcInt = &MainWindow::testInt;
(this->*funcInt)(12);
 
QMap<int, MyCoolMethod> arrFunc;
arrFunc[1] = funcInt;
(this->*arrFunc[1])(12);


Название: Re: массив указателей на функции
Отправлено: VozaMFC от Январь 16, 2012, 15:51
Спасибо народ!
Уже начал было думать что без соответствующего класса или глобальных функций ну никак.

kambala большой тебе респект за предложенное решение и совет, все получилось!
Если честно, я в восторге  :-))))))


Название: Re: массив указателей на функции
Отправлено: mutineer от Январь 16, 2012, 15:55
Какбе совет камбалы тоже с "соответствующим классом"


Название: Re: массив указателей на функции
Отправлено: kambala от Январь 16, 2012, 16:33
Спасибо народ!
Уже начал было думать что без соответствующего класса или глобальных функций ну никак.

kambala большой тебе респект за предложенное решение и совет, все получилось!
Если честно, я в восторге  :-))))))
вообще говоря, прежде, чем лезть на форум с подобными вопросами, надо открыть книжку по плюсам или немного поспрашивать гугл


Название: Re: массив указателей на функции
Отправлено: VozaMFC от Январь 23, 2012, 12:52
Какбе совет камбалы тоже с "соответствующим классом"
Это получается выносить реализацию в отдельный класс и хранить указатели на функции данного класса...
Это немного мне не подходит.


Название: Re: массив указателей на функции
Отправлено: mutineer от Январь 23, 2012, 12:58
Какбе совет камбалы тоже с "соответствующим классом"
Это получается выносить реализацию в отдельный класс и хранить указатели на функции данного класса...
Это немного мне не подходит.

Твои методы - это члены класса MainWindow. Значит для их вызова нужен экземпляр класса MainWindow. Так как вызываешь ты эти методы в других методах MainWindow, то this как раз подходит на роль этого экземпляра