Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ кривой Безье https://www.cyberforum.ru/ cpp/ thread192259.html
написать проектную процедуру создания кривой Безье, Желательно в С++ Добавлено через 17 часов 16 минут помогайте срочно надо(( я не знаю как сделать .... ил дайте ссылку на информацию как ее...
Выявление такого же ай-пи/мак адреса C++
Усем здрасти!) имеется необходимость написать приложение, которое, бы присваивало ip адрес сетевой карте и менять ее мак-адресс. Но самое интересное, что приложение должно извещать пользователя о...
C++ КНИГИ Подскажите харошую(лучшую) книгу по С++ ИЛИ Visual C++ Добавлено через 2 часа 45 минут Посрветуйте https://www.cyberforum.ru/ cpp/ thread191642.html C++ Использование данных из разных потоков Привет всем! Возникла проблема с использованием данных из разных потоков в многопоточном приложении 1) Допустим созданы два потока, которые создают некоторые переменные. Как потом подключиться... https://www.cyberforum.ru/ cpp/ thread191392.html
C++ Как достать архив из exe
Короче, нужно засунуть архив в exe и при запуске программа должна вытащить этот архив на рабочий стол. Подскажите как это можно реализовать программно??? :wall:
C++ Фрагментирование файла Всем доброго времени суток. Пишу программу для работы с большими файлами. Файл состоит из блоков размером 512 байт. Каким образом при удалении блоков в середине файла сделать так, чтобы система не... https://www.cyberforum.ru/ cpp/ thread191228.html
C++ Cannot open include file: 'stream.h': No such file or directory https://www.cyberforum.ru/ cpp/ thread191083.html
Для использования функций ввода/вывода cin/cout как я понимаю необходимо подключени библиотеки stream.h ? Но Visual Studio 2008 ругается - fatal error C1083: Cannot open include file: 'stream.h':...
Вопрос по знаку ; Реакция программы с применением этого знака и без него C++
#include "stdafx.h" #include <conio.h> int main() { int fahr; for(fahr=0; fahr <= 300; fahr= fahr + 20) printf("%4d %6.1f\n",fahr,(5.0/9.0)*(fahr-32.0)); _getch();
C++ Способы решения тривиальных/не тривиальных задач https://www.cyberforum.ru/ cpp/ thread190349.html
Други! В этой теме я предлагаю выкладывать свои способы решения тривиальных/не тривиальных задач и стремиться к элегантности их решения, то бишь к совершенству кода. Это будет способствовать...
C++ Взаимодействие cpp-dll и delphi-программы https://www.cyberforum.ru/ cpp/ thread190299.html
Есть программа, написанная на делфи, а также две длл: одна на с++, другая на делфи. Программа передает параметр - указатель packed record. PToRec = ^TRec; TRec = packed record mybool:...
Конструкторы,передача сообщений объектам и реакции объектов на сообщения в С++ C++
Привет всем! Тему чуть-чуть понимаю,но задачу сделать не могу, вы не могли бы мне помочь с этим? вот задача:Создаваемый объект должен сообщать об ошибке и типе параметра сообщения,если значение...
C++ Обмен данными между процессами При создании дочернего процесса при помощи функции BOOL CreateProcess ( LPCTSTR lpApplicationName, // имя исполняемого модуля LPTSTR lpCommandLine, //... https://www.cyberforum.ru/ cpp/ thread189326.html
141 / 142 / 64
Регистрация: 11.11.2010
Сообщений: 864
Записей в блоге: 10
0

callback метода класса - C++ - Ответ 1117849

17.11.2010, 15:21. Показов 5148. Ответов 2
Метки (Все метки)

Предыстория: нужно последовательно запускать несколько однотипных циклов большой степени вложенности, в теле которых вызывать разные функции.
Т.к. вроде бы переписывать циклы (тем более громоздкие по STL-ным контейнерам) плохо, то я решил сделать одну функцию, в которой реализуется цикл, в теле которого вызывается переданная в качестве параметра callback-функция. Все эти функции имели отношение к классу, так что и callback функция-
являлась методом.
Далее по существу.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
// класс "учебный процесс" - оформляет последовательность
// действий в программе
class CStudy {
    // деканат, который содержит и всю остальную структуру
    CDeanery deanery;
 
public:
    // обработка всего учебного процесса в течение семестра
    void CStudy::Process() {
        
        Init();                 // инициализация всей системы
        SelectQualWorks();      // выбор квалификационных работ студентами
        ExecuteOrders();        // выполнение приказов
        MakeExams();            // проведение экзаменов
        MakeCritics();          // написание рецензий
        ProtectQualWorks();     // защита квалификационных работ
        CreateFateOrders();     // создание приказов по результату сессии
        ExecuteOrders();        // выполнение приказов
    }
private:
    // инициализация всей системы
    void Init() {
        deanery.Init();
    }
    // выбор квалификационных работ для всех выпукников - и выпуск приказов
    void SelectQualWorks() {
        ForEachStudent( &CStudy::SelectQualWork );  // (1)
    }
    // провести экзамены для всех студентов - получить их нижние оценки
    void MakeExams() {
        ForEachStudent( &MakeExam );    // (2)
    }
    // написание рецензий для кв. работ всех студентов, кто пишет кв. работы
    void MakeCritics() {
        ForEachStudent( &MakeCritic );  // (3)
    }
    // защита кв. работ всех студентов, пишущих кв. работы
    void ProtectQualWorks() {
        ForEachStudent( &ProtectQualWork ); // (4)
    }
    // создание приказов по результату сессии
    void CreateFateOrders() {
        deanery.CreateFateOrders();
    }
    // выполнение текущих приказов
    void ExecuteOrders() {
        deanery.ExecuteOrders();
    }
 
 
private:
    //// функция-параметр для исполнения для каждого студента
    //typedef void CStudy::ProcessStudent( CStudent* );
    //typedef ProcessStudent* PProcessStudent;
 
    // функциия, исполняющая выполняющая свою функцию-параметр надо всеми студентами
    void ForEachStudent( void ( *CStudy::pFunc )( CStudent * ) );
 
    // выбрать работу одним студентом
    void SelectQualWork( CStudent *st );
    // пройти экзамен одним студентом
    void MakeExam( CStudent *st );
    // написать рецензию для кв. работы студента
    void MakeCritic( CStudent *st );
    // провести защиту кв. работы студента
    void ProtectQualWork( CStudent *st );
 
 
 
};
Собственно такой кульбит с CStudy:: в (1) обусловлен попыткой исправить ошибку аналогичную возникающим в строках (2), (3), (4). Итак ошибки следующие:
(2), (3), (4) :
C++
1
Error   2   error C2276: '&' : illegal operation on bound member function expression    d:\!study\тти\3 семестр\ооп\oop\oop_course\study.h 36
(1) :
C++
1
Error   1   error C2664: 'CStudy::ForEachStudent' : cannot convert parameter 1 from 'void (__thiscall CStudy::* )(CStudent *)' to 'void (__cdecl *)(CStudent *)'    d:\!study\тти\3 семестр\ооп\oop\oop_course\study.h 32
Мне кажется (1) шаг в сторону исправления, но помогите добить эту маленькую... Заранее признателен за конструктив.

Вернуться к обсуждению:
callback метода класса C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.11.2010, 15:21
Готовые ответы и решения:

Вызов метода класса из другого класса
Есть два класса &quot;нижнего уровня&quot; и один &quot;верхнего уровня&quot; Классы &quot;нижнего уровня&quot; имеют методы с...

Метод класса не работает как callback-функция
Всем привет! Помогите разобраться с синтаксисом. Есть gui-прога, в которой содержится функция...

Использование метода класса как функции в качестве типизированного аргумента в методе класса
Использование метода класса как функции в качестве типизированного аргумента в методе класса ...

Доступ к приватному полю класса X из метода класса Y
class X { private: int a; }; class Y {

2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.11.2010, 15:21
Помогаю со студенческими работами здесь

Передача метода класса в качестве параметра для метода другого класса
Здравствуйте, Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог...

Callback нестатического метода
Здравствуйте, &lt;сомневался куда лучше обратиться в этот раздел или WinAPI&gt; Столкнулся с тем...

Вызов метода класса из метода другого класса
Помогите школнегу Имеется несколько классов class Com { protected: unsigned char bufrd,...

Callback внутри отдельного класса
Здравствуйте, можно ли как то организовать callbackи внутри отдельного класса? Допустим ...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru