Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ кривой Безье http://www.cyberforum.ru/cpp/thread192259.html
написать проектную процедуру создания кривой Безье, Желательно в С++ Добавлено через 17 часов 16 минут помогайте срочно надо(( я не знаю как сделать .... ил дайте ссылку на информацию как ее сделать! Добавлено через 9 часов 13 минут выручайте....
C++ Алгоритмы_классы_объекты Составить описание класса для определения одномерных массивов строк фиксированной длины. Запрограммировать такие методы класса: 1)Контроль вывода за пределы массива 2)Слияние двух массивов за исключением повторяющихся элементов 3)Вывод всего массива http://www.cyberforum.ru/cpp/thread192238.html
C++ Поиск матрицы в матрице
Здравствуйте, подскажите, пожалуйста, как написать программу, чтобы считала, сколько раз одна матрица встречается в другой! Может кто-то писал что-то подобное...Не могу ничего придумать((
Контейнеры и итераторы C++
Тема: иерархия объектов и группа. Итераторы. Задание: Имена всех монархов на заданном континенте.
C++ Создание анкеты http://www.cyberforum.ru/cpp/thread191714.html
Помогите написать программу : Структура элемента массива анкета: фамилия, имя, отчество, год рождения, домашний адрес (город, улица, дом), оценки в аттестате зрелости (математика, физика, украинский язык, информатика), год окончания среднего учебного заведения. Определить абитуриентов-одесситов, имеющих максимальный средний балл в аттестате зрелости.
 

Показать сообщение отдельно
GoldenId
 Аватар для GoldenId
45 / 43 / 2
Регистрация: 11.11.2010
Сообщений: 272
Завершенные тесты: 1

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

17.11.2010, 15:21. Просмотров 2291. Ответов 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) шаг в сторону исправления, но помогите добить эту маленькую... Заранее признателен за конструктив.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 19:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru