首页 > 解决方案 > 回调函数未提供所需的输出

问题描述

根据在 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指针需要正确初始化。

您能否为此回调实现建议任何适当的设计/实现。

标签: c++11design-patternscallback

解决方案


推荐阅读