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

Попытка создать обработку событий - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Демографическая модель Мальтуса http://www.cyberforum.ru/cpp-beginners/thread997359.html
Добра вам, дорогие форумчане. Нужно написать программу, которая по заданным параметрам будет строить демографическую модель Мальтуса Параметры которые можно менять: коэффициент рождаемости, смертности, начальная численность популяции, внешние переменные В фото прикрепил вырезку из практикума
C++ Разработка библиотеки на С++ работа со списками Требуется разработать библиотеку com для работы с полуторосвязным списком(где каждый элемент имеет указатель на следующий и только каждый 10ый имеет указатель назад) в этой библиотеке должны быть все функции для работы с таким списком. Также он является упорядоченным. Заранее большое спасибо, помогите новичку пожалуйста. http://www.cyberforum.ru/cpp-beginners/thread997348.html
Решение задачи C++
Имеется задача: Имеем К квадратных плиток. Из них нужно выложить прямоугольник высотой H и шириной W плиток. Вариантов, как вы понимаете, немало. Но каждый прямоугольник имеет свой ​​код. Этот код вычисляется как сумма двух величин: Квадратоподобие = | H - W | Экономичность = К - H * W Нужно найти минимально возможный код прямоугольника.
Сортировка слиянием C++
Пожалуйста можете предоставить код сортировки слиянием, который будет считывать массив с N чисел, а возвращать упорядоченный массив. Скажите будет ли сортировка слиянием работать быстрее или равных с быстрою сортировкою. Будет ли функция std::sort() работать быстрее или равных с быстрою сортировкою. За ранние спасибо.
C++ Задан массив целых чисел. Определить, сколько процентов от всего количества элементов исходного массива составляют нечётные элементы http://www.cyberforum.ru/cpp-beginners/thread997334.html
Что-то я совсем не так делаю. Помогите разобраться. Заранее большое спасибо. #include <iostream>; #include<stdlib.h>; using namespace std; int main() { setlocale(LC_ALL, "Rus"); int i, per,odd; int array;
C++ free Выделил память под массив(строку), размером 5 элементов. char *str; str = (char*)calloc(5,sizeof(char)); if (str == NULL) { cout<<"ERROR"<<endl; exit(1); } По мере ввода строки, выделяется дополнительная память. realloc может возвратить указатель на новую область памяти, поэтому старую нужно очистить. подробнее

Показать сообщение отдельно
Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2

Попытка создать обработку событий - C++

04.11.2013, 13:14. Просмотров 264. Ответов 2
Метки (Все метки)

Попытался создать что-то наподобии сигналов и слотов.

Вот мой файл Event.h

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#ifndef ELEM_H
#define ELEM_H
#include <vector>
#include "Delegate.h"
using std::vector;
 
struct Empty{};
extern Empty e1;
 
class EventContainer {public: virtual ~EventContainer() {}};
template< class A >
class IEventContainer : public EventContainer
{
public:
    IEventContainer(A &reciv, Delegate& deleg) : reciv_(&reciv), deleg_(&deleg), slot_(NULL)
    {};
 
    IEventContainer(A &reciv, void(*slot)(void)) : reciv_(&reciv), deleg_(NULL), slot_(slot)
    {};
 
    template< class B >
    void compute(B* reciv)
    {
        if(reciv != reciv_) return;
        if(deleg_ == NULL) slot_();
        else (*deleg_)();
    }
 
    A *reciv_;
    Delegate *deleg_;
    void(*slot_)(void);
};
 
class Event
{
public:
    Event() {};
 
    void push(EventContainer* element) 
    {
        container.push_back(element);
    }
 
    template< class A >
    void operator()(A *reciv)
    {
        for(size_t i=0; i<container.size(); i++)
        {
            IEventContainer<A>* temp = dynamic_cast<IEventContainer<A>*>(container[i]);
            temp->compute(reciv);
        }
    }
 
private:
    vector<EventContainer*> container;
};
 
template< class A, class B, class C>
void Connect(A &reciv, Event& signal, B &tranc, C slot)
{
    Delegate *temp = new Delegate;
    temp->Connect(&tranc, slot);
    IEventContainer<A> *element = new IEventContainer<A>(reciv, *temp);
    signal.push(element);
}
 
template< class A, class B>
void Connect(A &reciv, Event& signal, B slot)
{
    IEventContainer<A> *element = new IEventContainer<A>(reciv, slot);
    signal.push(element);
}
 
template< class A >
void Connect(Event& signal, A slot)
{
    IEventContainer<Empty> *element = new IEventContainer<Empty>(e1, slot);
    signal.push(element);
}
 
 
namespace Signal
{
    extern Event show;
}
using namespace Signal;
 
#endif

Если я проверяю все это так все работает

C++
1
2
3
4
5
6
7
8
9
void main()
{
    Window w1(Coord(5, 5), Size(10, 10));
    Window w2(Coord(15, 15), Size(10, 10));
 
 
    Connect(w1, show, w2,  &Window::show);
    w1.show();
}
Вот так тоже все замечательно

C++
1
2
3
4
5
6
7
8
9
void main()
{
    Window w1(Coord(5, 5), Size(10, 10));
    Window w2(Coord(15, 15), Size(10, 10));
 
 
    Connect(w1, show, &fun);
    w1.show();
}

А при записи без отправителя сигнала вылетает ошибка после запуска программы

C++
1
2
3
4
5
6
7
8
9
void main()
{
    Window w1(Coord(5, 5), Size(10, 10));
    Window w2(Coord(15, 15), Size(10, 10));
 
 
    Connect(show, &fun);
    w1.show();
}


У меня возможны 3 вида обработки:

1)Если объект отправил сигнал, то объект выболняет метод
2)Если объект отправил сигнал, то выполняется функция
3)Если отправлен (не важно от кого) сигнал, то выполняется функция

Первые 2 работают. Третий нет.

Для его реализации я создал пустую структуру на которую нужно ссылкатся (так как отправителя сигнала нет). Но почему то этот способ не работает. Уже второй день не могу найти проблему.
Помогите пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru