在wxwidgets中绑定任意函数

问题描述 投票:0回答:0

我想创建许多复合对象,每个对象都包含一个滚动列表和一些按钮(对于我的示例,我已将代码缩减为仅使用一个按钮创建其中一个对象)。除了布局、大小和按钮调用的函数外,所有这些对象都非常相似 (即对于每个对象,同一按钮的回调可以不同)。

因此,在这些复合对象的构造函数中,我想接收绑定到按钮的函数(同样,在我的示例中,它将是一个按钮)。

我有一个可以运行的示例版本(没有传递 Bind 函数),还有一个示例在我尝试将传入函数的代码添加到 Bind 时无法编译。

这是编译器错误:

stack2.cpp: In constructor ‘MainPanel::MainPanel(wxFrame*)’:
stack2.cpp:106:94: error: no matching function for call to ‘MyAddRemoveList::MyAddRemoveList(MainPanel*, const char [12], const char [11], int, int, int, bool, void (MyAddRemoveList::*)(wxCommandEvent&))’
  106 | xLB_MULTIPLE | wxLB_HSCROLL | wxLB_NEEDED_SB, false, &MyAddRemoveList::OnAddToList);
                                                                           1,68          Top
tack2.cpp:61:1: note: candidate: ‘MyAddRemoveList::MyAddRemoveList(wxWindow*, const char*, const char*, int, int, long int, bool, func)’
   61 | MyAddRemoveList::MyAddRemoveList(wxWindow *panel, const char *display_name,
      | ^~~~~~~~~~~~~~~
stack2.cpp:62:79: note:   no known conversion for argument 8 from ‘void (MyAddRemoveList::*)(wxCommandEvent&)’ to ‘func’ {aka ‘void (*)(wxCommandEvent&)’}
   62 |       const char *table_name, int w, int h, long style, bool do_extract, func fpt) :
      |                                                                          ~~~~~^~~
stack2.cpp:41:7: note: candidate: ‘MyAddRemoveList::MyAddRemoveList(const MyAddRemoveList&)’
   41 | class MyAddRemoveList : public wxBoxSizer {
      |       ^~~~~~~~~~~~~~~
stack2.cpp:41:7: note:   candidate expects 1 argument, 8 provided
stack2.cpp:41:7: note: candidate: ‘MyAddRemoveList::MyAddRemoveList(MyAddRemoveList&&)’
stack2.cpp:41:7: note:   candidate expects 1 argument, 8 provided
make: *** [stack2.make:94: stack2.o] Error 1

我不明白为什么编译器不能将

void (*)(wxCommandEvent&)
转换为
void (MyAddRemoveList::*)(wxCommandEvent&)
。这是我的问题。

备注:

  • 我是stackoverflow的新手,所以请怜悯。
  • 我对 c++ 和 wxwidgets 都是全新的,所以请怜悯。
  • 我已将代码精简为最小版本(一个没有 Bind 也能“工作”,而一个有 Bind 但无法编译)。但同样,它们每行大约 100 行,我不知道这是否太长而无法包含在此处的问题中。
  • 流行操作系统 22.04
  • wxwidgets 3.0

任何帮助/建议将不胜感激。提前致谢...

c++11 wxwidgets bind
© www.soinside.com 2019 - 2024. All rights reserved.