Форум программистов, компьютерный форум, киберфорум
Наши страницы

Передача метода класса в качестве параметра для метода другого класса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Не выходит из цикла http://www.cyberforum.ru/cpp-beginners/thread780772.html
Доброго времени суток! При нажатии цифры "1", а затем последовательно "2" z должно суммировать результат кейсов и выводить программу из цикла. Но происходит зацикливание. Не могу понять в чем...
C++ Ошибка компиляции Есть проект, в котором абстрактный класс Colection, и два наследуемых Vector и Steck. При компиляции выдает ошибки: Ошибка 1 "error C2011: Colection: переопределение типа "class"" в colection.h ... http://www.cyberforum.ru/cpp-beginners/thread780762.html
Pointers and dynamic arrays C++
Изучаю тему указатели и динамичесские массивы в классах. Хотелось бы быть уверенным в следующих ответах: 1) Когда класс использует динамическую память, какая member функция должна ,быть...
C++ Ошибка
Помогите устранить ошибку, пожалуйста
C++ Полином от трех переменных (X, Y, Z) представить в виде циклического списка, в котором каждый узел имеет пять полей http://www.cyberforum.ru/cpp-beginners/thread780754.html
вот условие задачи: Полином от трех переменных (X, Y, Z) представить в виде циклического списка, в котором каждый узел имеет пять полей: одно - для коэффициента члена полинома, второе - для...
C++ Запись структурной информации в файлы.Хелп! #include <iostream> #include <cstring> #include <windows.h> #include <fstream> #include <iomanip> #include <cstdlib> #include <cstring> #include <fstream> using namespace std; подробнее

Показать сообщение отдельно
rasnaut
0 / 0 / 0
Регистрация: 17.07.2008
Сообщений: 6

Передача метода класса в качестве параметра для метода другого класса - C++

06.02.2013, 21:31. Просмотров 989. Ответов 2
Метки (Все метки)

Здравствуйте,
Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог прервать любую функцию, при этом абсолютна не зная, что за функцию ему передали. Мне ничего лучше в голову не пришло, как создать класс унаследованный от QThread (использую QT, но думаю это не принципиально в данном вопросе), который мог бы получать функцию какого то класса в качестве атрибута и выполнять её в теле run(), выполнение которого он бы уже мог прервать с помощью метода terminate().
Вот какой класс у меня получился:
C++ (Qt)
1
2
3
4
5
6
7
[COLOR=#808000]class[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800080]Stopper[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000]:[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#808000]public[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800080]QThread[/COLOR] [COLOR=#000000]{[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#800080]Q_OBJECT[/COLOR] [COLOR=#808000]public[/COLOR][COLOR=#000000]:[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]explicit[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800080]Stopper[/COLOR][COLOR=#000000]([/COLOR][COLOR=#800080]QObject[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000]*[/COLOR]parent[COLOR=#c0c0c0] [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000080]0[/COLOR][COLOR=#000000]);[/COLOR]  [COLOR=#c0c0c0]    [/COLOR][COLOR=#000000]~[/COLOR][COLOR=#000000][I]Stopper[/I][/COLOR][COLOR=#000000]();[/COLOR]  [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000][I]run[/I][/COLOR][COLOR=#000000]();[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]bool[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800000]stopProcess[/COLOR][COLOR=#000000];[/COLOR][COLOR=#003900][I][/I][/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR]connectRequest[COLOR=#000000]([/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000]([/COLOR]*mycallback_f[COLOR=#000000])());[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000](*[/COLOR][COLOR=#800000]callback_funk[/COLOR][COLOR=#000000])();[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]bool[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800000]getReq[/COLOR][COLOR=#000000];[/COLOR][COLOR=#808000]signals[/COLOR][COLOR=#000000]:[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR]finished[COLOR=#c0c0c0] [/COLOR][COLOR=#000000]();[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0]    [/COLOR]started[COLOR=#c0c0c0] [/COLOR][COLOR=#000000]();[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR]terminated[COLOR=#c0c0c0] [/COLOR][COLOR=#000000]();[/COLOR]   [COLOR=#808000]public[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#808000]slots[/COLOR][COLOR=#000000]:[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR]stopSignalS[COLOR=#000000]()[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#000000]{[/COLOR] [COLOR=#c0c0c0]     [/COLOR][COLOR=#c0c0c0] [/COLOR]terminate[COLOR=#000000]();[/COLOR][COLOR=#c0c0c0]    [/COLOR][COLOR=#000000]}[/COLOR]    [COLOR=#000000]};
[/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800080]Stopper[/COLOR][COLOR=#000000]::[/COLOR][COLOR=#000000][I]run[/I][/COLOR][COLOR=#000000]()[/COLOR] [COLOR=#000000]{[/COLOR] [COLOR=#c0c0c0]    [/COLOR][COLOR=#800000]callback_funk[/COLOR][COLOR=#800000][COLOR=#000000]();[/COLOR][/COLOR]//здесь функцию запускаем [COLOR=#000000]}[/COLOR]  [COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#800080]Stopper[/COLOR][COLOR=#000000]::[/COLOR]connectRequest[COLOR=#000000]([/COLOR][COLOR=#808000]void[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000]([/COLOR][COLOR=#000000]*mycallback_f[/COLOR][COLOR=#000000])())[/COLOR] [COLOR=#000000]{[/COLOR] [COLOR=#c0c0c0]   [/COLOR][COLOR=#800000]callback_funk[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000]=[/COLOR][COLOR=#c0c0c0] [/COLOR][COLOR=#000000]mycallback_f[/COLOR][COLOR=#000000];//здесь мы копируем указатель на функцию[/COLOR] [COLOR=#000000]}
....
[/COLOR]
[COLOR=#000000]connectRequest[COLOR=#000000]([/COLOR][COLOR=#000000][/COLOR][COLOR=#000000][/COLOR][COLOR=#800000]SomeClassPtr[/COLOR][COLOR=#000000]->[/COLOR]SomeFunk[COLOR=#000000]([/COLOR][COLOR=#800000][/COLOR][COLOR=#000000]));//[/COLOR][/COLOR][COLOR=#000000][COLOR=#000000]вот здесь активно ругается компилятор[/COLOR]
....
[/COLOR]
В результате путём различных ухищрений я упёрся в ошибку:
"error C2664: Stopper::connectRequest: невозможно преобразовать параметр 1 из 'void' в 'void (__cdecl *)(void)' Выражение, имеющее тип void, нельзя преобразовать в другой тип"
Насколько я понял изучая эту тему, мне нужно корректно реализовать делегат, но у меня никак не получается это сделать...
Прошу помощи.
Заранее спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru