在wxWidgets中使用模板类作为bind()的输入

时间:2019-03-06 18:58:57

标签: c++ templates wxwidgets

我有一组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命令的情况下进行编译或运行时,它不会给出错误。

感谢您的帮助或见解。预先感谢。

0 个答案:

没有答案