Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
WarpDrive
Заблокирован
1

Отслеживание изменения переменной

09.11.2016, 22:04. Просмотров 506. Ответов 9
Метки нет (Все метки)

Есть переменная, допустим int a;, хочу в логике работы софта сделать отслеживание изменения переменной, но не хочу тратить на каждую переменную много памяти. Единственное, как пока что я это вижу - сделать класс - обвязку и сделать геттер и сеттер, где и отслеживать изменения, но этот класс - дополнительные байты на каждую переменную, то есть на тот же int будет оверхедом сверху тратиться много лишних байт... Можно ли как - то без этого?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2016, 22:04
Ответы с готовыми решениями:

Отслеживание изменения независимого файла
Возможно, этот вопрос уже проскакивал, но тем не менее...... Итак, проблема...

Ссылки в классе. Отследить изменения переменной
Пишу игру в проекте есть 4 класса class Entity, class PLAYER, class Animation и...

Сделать событие изменения переменной в классе
в классе есть переменные в области паблик. Надо сделать так что при...

Изменения значения переменной типа COORD
Всем доброго времени суток! Недавно я, найдя хороший способ перемещения курсора...

Изменения названия переменной класса родителя в классе наследнике
Изменения названия переменной класса родителя в классе наследнике Возможно ли...

9
DrOffset
9014 / 4861 / 1196
Регистрация: 30.01.2014
Сообщений: 7,942
09.11.2016, 22:22 2
Цитата Сообщение от WarpDrive Посмотреть сообщение
но этот класс - дополнительные байты на каждую переменную, то есть на тот же int будет оверхедом сверху тратиться много лишних байт...
Откуда ты это взял?
0
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,944
09.11.2016, 22:32 3
Цитата Сообщение от WarpDrive Посмотреть сообщение
обвязку и сделать геттер и сеттер,
то есть получить данные и присвоить данные
каким образом это связано с
Цитата Сообщение от WarpDrive Посмотреть сообщение
отслеживание изменения переменной,
?
0
WarpDrive
Заблокирован
09.11.2016, 22:37  [ТС] 4
Цитата Сообщение от DrOffset Посмотреть сообщение
Откуда ты это взял?
Ну потому что, если в моём случае это делать по правильному, через класс, то тогда уже туда до полного фарша я ещё кое что добавлю, что будет байты жрать

Цитата Сообщение от ValeryS Посмотреть сообщение
то есть получить данные и присвоить данные
каким образом это связано с
Ну как как, если кто - то пишет в переменную через сеттер, я же это вижу и отсылаю сигнал куда надо

Вообще в отладчике есть брейк он мемори чэнджед, вот интересно, он как устроен? Типа Cheat Engine ?
0
DrOffset
9014 / 4861 / 1196
Регистрация: 30.01.2014
Сообщений: 7,942
09.11.2016, 22:48 5
Цитата Сообщение от WarpDrive Посмотреть сообщение
Ну потому что, если в моём случае это делать по правильному, через класс, то тогда уже туда до полного фарша я ещё кое что добавлю, что будет байты жрать
Странные люди. Не нужны если "байты", то и не добавляй.
Если нужно логировать изменения переменной, то совсем не обязательно логгер рядом с каждым объектом хранить.

Добавлено через 5 минут
Кликните здесь для просмотра всего текста

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
#include <iostream>
 
class IntLogger
{
public:
    static IntLogger & instance()
    {
        static IntLogger logger;
        return logger;
    }
    
    void log(int x, int v)
    {
        // отсылаем "куда надо"
        std::cout << "Someone change value from [" << x << "] to [" << v << "]\n";
    }
};
 
class Int
{
public:
    Int(int v = 0) : value(v) 
    { }
    
    Int & operator=(int v)
    {
        // тут добавляешь свое отслеживание
        IntLogger::instance().log(value, v);
        value = v;
        return *this;
    }
    
    operator int() const
    {
        return value;
    }
    
private:
    int value;
};
 
 
int main()
{
    std::cout << sizeof(Int) << '\n'
              << sizeof(int) << '\n';
    
    Int a = 1;
    Int b;
    
    b = 4;
    b = a + 6;
    
    std::cout << b << std::endl;
}
http://rextester.com/YDYXD36840
2
ValeryS
Модератор
7372 / 5573 / 707
Регистрация: 14.02.2011
Сообщений: 18,944
09.11.2016, 22:52 6
Цитата Сообщение от WarpDrive Посмотреть сообщение
Вообще в отладчике есть брейк он мемори чэнджед, вот интересно, он как устроен?
по разному
есть например железная точка останова при обращении к какой-то ячейке памяти на чтение или на запись, отлавливается самим процессором
есть мониторинг
в обще куча способов
1
WarpDrive
Заблокирован
09.11.2016, 22:52  [ТС] 7
Цитата Сообщение от DrOffset Посмотреть сообщение
Если нужно логировать изменения переменной, то совсем не обязательно логгер рядом с каждым объектом хранить.
Тут фишка не в этом, а в том, что каждая переменная должна испускать сигнал типа onDataChanged в параметрической среде, то есть там большая сигнальная сеть и куча bind-ингов (ну линков) между Item-ами... В общем, на какие - то крупные объекты мне памяти не жаль (допустим группа из 10-и переменных), а вот когда речь идёт об таком сигнальном элементе, состоящем из одного только int-а, как - то жаба душит

Я вообще наделся услышать ответ типа "Вот есть тут кроссплатформенный способ отслеживания изменения памяти, хук называется так - то"
0
DrOffset
9014 / 4861 / 1196
Регистрация: 30.01.2014
Сообщений: 7,942
09.11.2016, 22:58 8
Цитата Сообщение от WarpDrive Посмотреть сообщение
Я вообще наделся услышать ответ типа "Вот есть тут кроссплатформенный способ
Такого ты точно не услышишь, пока задачу нормально не опишешь.

Цитата Сообщение от WarpDrive Посмотреть сообщение
Тут фишка не в этом, а в том, что каждая переменная должна испускать сигнал типа onDataChanged в параметрической среде, то есть там большая сигнальная сеть и куча bind-ингов (ну линков) между Item-ами...
В принципе это вообще никак не противоречит тому, что я выше показал\сказал.
Другое дело, что ты можешь чего-то не договаривать.
Но экстрасенсов-то нет, все на битву ушли.
1
WarpDrive
Заблокирован
09.11.2016, 23:06  [ТС] 9
ладно, всем спасибо, нет - так нет (я про "кроссплатформенный способ отслеживания изменения памяти"), пожертвую памятью и чёрт бы с ней, сейчас на ограничение памяти как - то непристойно смотреть, на всех компах её уже по дефолту много
0
DrOffset
09.11.2016, 23:22     Отслеживание изменения переменной
  #10

Не по теме:

Цитата Сообщение от WarpDrive Посмотреть сообщение
ладно, всем спасибо, нет - так нет
Вот ведь лень человеческая что делает :)
Вместо того, чтобы описать нормально задачу... мы делаем странные выводы.
Эх, ну ладно, если тебе лень, то мне тем более (это я про "догадаться что у тебя за система и объяснить как подход, который я выше запостил, можно применить в ней").

0
09.11.2016, 23:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.11.2016, 23:22
Привет! Вот еще темы с ответами:

Побитовый сдвиг без изменения переменной (не понимаю как работает код)
Я до этого не особо использовал C++, но тут потребовалось разобраться с тем как...

a,b и c.Присвоить максимальное из них переменной a,минимальное-переменной c,среднее переменной b
даны произвольные числа a,b и c.Присвоить максимальное из них переменной...

Присвоить значение наименьшего элемента массива переменной М1, номер строки, где находится этот элемент, - переменной Т, номер столбца - переменной С
Массив С действительных чисел имеет 5 строк и 11 столбцов. Присвоить значение...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru