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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
#1

Сигнал об обновлении данных - C++

14.06.2014, 07:51. Просмотров 174. Ответов 4
Метки нет (Все метки)

День добрый. Нужен совет.

Допустим у нас есть класс CS_Setting. И мы обновляем его даные в каком то модуле, допустим в майне. Как передать что данные обновленны в другие модули? Нужно что то похожее на сигналы и слоты из Qt. Тоесть при обновление данных в нутри класса вызывается связанная функция, не пренадлежащая классу.

У кого какие предложения и идее?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2014, 07:51     Сигнал об обновлении данных
Посмотрите здесь:

Звуковой сигнал \a C++
C++ Определить, сигнал какого цвета сигнал горит для пешеходов в этот момент.
C++ Сигнал SIGABRT
Звуковой сигнал биппера! (C++) C++
C++ Звуковой сигнал при выводе символа
C++ Сигнал-слот
C++ Звуковой сигнал!
C++ Не подается звуковой сигнал
Послать сигнал серверу о результатах поиска C++
Входной сигнал C++
Сигнал, Индекс массива C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
RaiaNKnight
96 / 70 / 7
Регистрация: 29.06.2011
Сообщений: 464
Записей в блоге: 1
14.06.2014, 08:10     Сигнал об обновлении данных #2
А в других модулях какие именно объекты должны знать об обновлении данных класса CS_Setting?

Можно создать некий интерфейс и реализовать его. Вызывать метод в классе, реализующем интерфейс, чтобы обновить данные в других модулях. Тут однако неясно, что именно обновлять в других модулях? Раскройте тему подробнее.
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
14.06.2014, 08:27  [ТС]     Сигнал об обновлении данных #3
Примерно так, но может есть более удачные мысли.
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
class CS_Setting{
    int d;
    void (* updateFun)();
    void updateNull(){return;}
public:
    CS_Setting(){d=0;updateFun=updateNull;}
    void setVariant(int date){d=date;updateFun();}
    int getVariant(){return d;}
    void setFunUpdate(void (*update)()){updateFun=update;}
};
 
void update(){
    //Тут обработка при получении сигнала
}
 
 
int main(int argc, char *argv[])
{
    CS_Setting a;
    a.setFunUpdate(update);
    a.setVariant(5);
    a.setVariant(5);
 
}
Добавлено через 8 минут
Задача по сути очень распространена, на Qt рещается навешиванием сигнала и припиской ему слотов. Надо при изменении настроек, эти самые настройки изменить. Например меняем количество проходов, а у нас вызывается функция и переинициализирует соответствующий класс на данное количество.

В реализации выши столкнулся с проблемой задания не одной а нескольких функций.
RaiaNKnight
96 / 70 / 7
Регистрация: 29.06.2011
Сообщений: 464
Записей в блоге: 1
14.06.2014, 08:58     Сигнал об обновлении данных #4
Если есть несколько разных функций update[i], то передаете массив указателей на них. При обновлении данных при помощи setVariant() в цикле пробегите по этому массиву.

Добавлено через 5 минут
Вот пример с vector и двумя функциями update:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <vector>
using namespace std;
 
void upd1() {
    cout << "UPD 1 EPTA!\n";
}
 
void upd2() {
    cout << "UPD 2 EPTA!\n";
}
 
int main() {
    vector <void (*)()> v;
    
    v.push_back(upd1);
    v.push_back(upd2);
    
    v[0]();
    v[1]();
    
    return 0;
}
Можете аналогично запилить любую другую структуру данных.
Winorun
38 / 38 / 4
Регистрация: 03.05.2013
Сообщений: 177
14.06.2014, 09:01  [ТС]     Сигнал об обновлении данных #5
RaiaNKnight спасибо за идею, я думаю лудше подойдет список. При уничтожении объектов будет проще удалять указатели. Только мой еле соображающий мозг не может придумать как организовать вызов функций из списка

Добавлено через 1 минуту
СПАСИБО
Yandex
Объявления
14.06.2014, 09:01     Сигнал об обновлении данных
Ответ Создать тему
Опции темы

Текущее время: 18:23. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru