c++ - 直接调用事件处理器

标签 c++ events methods wxwidgets

无法直接从我的代码调用事件处理程序。 2 年前我在这里发现了同样的问题。 original question

但是线 me_InsertCommentText(wxCommandEvent()); 未编译(mingw32-gcc 4.8、win7、codeblocks、wxFormBuilder)

error: no matching function for call to 'mjpgen_wdDialog::me_InsertCommentText(wxCommandEvent)' note: candidate is: note: void mjpgen_wdDialog::me_InsertCommentText(wxCommandEvent&)

对我来说,这似乎是由引用参数调用引起的。 我怎样才能让它发挥作用?

最佳答案

关于使用命名临时变量的答案在技术上是正确的,但重要的是你真的不应该首先这样做。处理程序只应该从 wxWidgets 调用,而不是直接调用一些 OnFoo(wxFooEvent&) 你应该重构你的代码,从 调用一些新的 DoFoo() >OnFoo(),然后在需要时从其余代码中调用 DoFoo()

这在使用 C++11 时变得更加简单,因为在这种情况下您甚至根本不需要 OnFoo() 并且可以只写

whatever->Bind(wxEVT_FOO, [=](wxCommandEvent&) { DoFoo(); });

避免额外的功能。

关于c++ - 直接调用事件处理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36995321/

相关文章:

multithreading - delphi - 类静态方法,多线程应用程序中的静态变量

C++ Vector 比计算几何中的 Vector 修改了两次

c++ - 无法在 visual studio 2012 中捕获 "ctor subscript out of range"异常

vba - 使用无模式表单和用户定义的类处理自定义事件

Python 使用错误数量的参数调用类方法

android - android 无法从一个类访问另一个类的方法

c++ - 更改复数输出格式

c++ - 为什么成员变量在 C++ 构造函数初始化列表中可见?

.net - 当PowerShell溢出时,如何使PowerShell捕获日志文件?

javascript - 从appendTo内容内部调用 Action