c++ - 在 wxWidgets 中使用模板类作为 bind() 的输入
问题描述
我有一组 wxPanel,用于笔记本的页面,用于 C++ 中的 GUI。它们都有不同的数据,但一组通用的设置功能是读取数据。我设计了一个帮助类(我的措辞)来容纳所有常用功能,因此每个面板或框架不需要剪切和粘贴基本相同的代码。辅助类是模板化的,并从 GUI 面板类内部调用,以便类可以使用这些功能。除了一项,wxWidgets 中的 bind(event, method, handler) 函数外,一切似乎都可以正常工作。这需要使用 MyHelperClass 中的构建 GUI 函数将 MyPanel 中的方法绑定到 MyPanel 中的按钮。我以前从未发布过代码,所以请原谅格式,但这里是基本函数/类的精简版本。
template<class T>
class MyHelperClass {
public:
typedef void (T::*buttonPush)(wxCommandEvent & event); // This typedef seems to work
void makeSomeGUIpanels(pl, &pb, buttonPush f, &pp, *p);
private:
};
template<class T>
void MyHelperClass<T>::makeSomeGUIpanels(pl, &pb, buttonPush f, &pp, *p) {
// Do some stuff to set up the panels, buttons and labels.
...
...
// Bind each button to the input function.
// **** HERE IS THE PROBLEM. ****
pb[0]->Bind(wxEVT_BUTTON, f, T);
// Put each panel together.
enterBox->Add(pb[0]);
pp[0]->SetSizer(enterBox);
}
我删掉了很多我认为与问题无关的代码,并删除了函数接口中的类型。例如在使用前在函数中定义了enterBox。该功能的使用发生在创建的每个面板版本中。一个例子是...
class MyPanel : public wxPanel
{
public:
MyPanel(wxWindow *parent);
private:
MyHelperClass<MyPanel> cpf;
// More stuff ...
}
cpf 中的方法在此面板的方法中调用以构建 GUI。
void MyPanel::SomeFunction(){
cpf.makeSomeGUIpanel(...);
}
将 T 放在绑定函数中会导致编译错误“T”:非法将此类型用作表达式。我尝试使用我在堆栈溢出中发现的其他方法将模板传递给函数,但没有一个有效。其他一切都有效,所以我认为我的模板使用并不可怕。我以前使用过模板,但从来没有这样的事情。我不确定问题是模板语法,它可能是 bind() 的 wxWidgets 问题。方法 f 需要属于处理程序,在本例中为 T,我认为编译器需要能够检查这一点,也许它不能。请注意,我在类中创建的 typedef 似乎在编译或运行注释掉的 bind 命令时不会出错。
我感谢任何帮助或见解。提前致谢。
解决方案
推荐阅读
- python - 如何从 1 个循环中获得多个输出?
- r - R:当一个包含另一个时的多个匹配
- python - 从文本文件中读取元组赋值(例如 d1: p, m, h, = 20, 15, 22)并对每个变量执行计算(例如 p*h)
- javascript - 如何在sortablejs中将元素的位置存储到不同的容器中?
- javascript - 如何通过函数 1 更改全局变量并在函数 2 中使用函数 1 重新计算的该全局变量的值
- java - for 循环只执行一次
- primefaces - 使用 RAD/Websphere 设置 PrimeFaces 的问题
- javascript - 如何在 javascript 中使用多个条件数组链接多个过滤器函数
- javascript - 不需要前缀的命令不起作用。不和谐.js
- c++ - 清理 switch 语句