我有一组wxPanels(笔记本页面),用于C ++中的GUI。它们都有不同的数据,但是一组通用的设置功能正在读取数据。我设计了一个辅助类(我的措辞)来容纳所有常用功能,因此每个面板或框架都不需要剪切和粘贴基本相同的代码。在GUI面板类内部对helper类进行了模板化和调用,以便该类可以使用这些功能。 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。在创建的每个Panel版本中都会使用该功能。一个例子是...
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命令的情况下进行编译或运行时,它不会给出错误。
感谢您的帮助或见解。预先感谢。