Согласно приведенному ниже фрагменту кода, который используется в ссылке 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 должен быть правильно инициализирован.
Не могли бы вы предложить какой-либо правильный дизайн / реализацию для этой реализации обратного вызова.