функция обратного вызова не дает желаемого выхода - PullRequest
1 голос
/ 30 мая 2019

Согласно приведенному ниже фрагменту кода, который используется в ссылке coliru, каждый раз, когда пользователь нажимает i-ую кнопку, значения m_clicks[i] и m_total_clicks должны увеличиваться. Чтобы достичь этого, класс MyFrame будет регистрировать обратный вызов "on_click-handler" для каждой кнопки. Попытка зарегистрировать button_clicked, поскольку обратный вызов не работает.
m_pushbuttons[i].on_click_handler(MyFrame::button_clicked); // Не дает ожидаемого результата

Ниже приведена ссылка на исходный код. https://coliru.stacked -crooked.com / а / c15865d59b41341f

Вот ожидаемый результат на основе приведенных ниже тестовых примеров для объектов f1 и f2 с методом print_stats.

//MyFrame f1(2)
//f1.m_buttons[0].click();
//f1.m_buttons[0].click();
//f1.m_buttons[0].click();
//f1.m_buttons[1].click();
//f1.m_buttons[1].click();

//f1.print_stats();

//MyFrame f2(3);
//f2.m_buttons[2].click();
//f2.m_buttons[2].click();
//f2.m_buttons[2].click();
//f2.m_buttons[1].click();
//f2.print_stats();
// Should print:
// Total Clicks: 4
// Button[0] clicks: 0
// Button[1] clicks: 1
// Button[2] clicks: 3

Так что в основном мне нужно написать клиентский класс, чтобы при создании экземпляра он создавал N таких кнопок (где N - параметр времени конструктора). Клиентский класс хочет зарегистрировать обратный вызов, чтобы отслеживать нажатия кнопок, но в текущей реализации есть несколько проблем.

(1) Инициализирован std :: vector MyFrame :: m_clicks (2) статически и значение инициализации должно быть таким же, как значение инициализированного объекта MyFrame вместо статического значения.

(2) Без объявления статических m_total_clicks и m_clicks, есть ли другой способ добиться того же.

(3) в строке №. 20 указатель m_ftr должен быть правильно инициализирован.

Не могли бы вы предложить какой-либо правильный дизайн / реализацию для этой реализации обратного вызова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...