c++11 - 回调函数未提供所需的输出
问题描述
根据在 coliru 链接中共享的以下代码片段,每次用户单击第 i 个按钮时,m_clicks[i]
andm_total_clicks
都应该增加。为此,该类MyFrame
将为on_click-handler"
每个按钮注册一个 " 回调。尝试注册 button_clicked 作为回调不起作用。
m_pushbuttons[i].on_click_handler(MyFrame::button_clicked);
// 没有给出预期结果
下面是源代码的 coliru 链接。 https://coliru.stacked-crooked.com/a/c15865d59b41341f
这是基于以下测试用例的预期输出,用于使用 print_stats 方法的 f1 和 f2 对象。
//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指针需要正确初始化。
您能否为此回调实现建议任何适当的设计/实现。