C++事件处理
C++ Event Handling
我想在标准C++(UNIX)中实现类似C#的事件处理,如以下代码:
public class connection{
public delegate void Message(object sender, string text);
public event Message doMessage = null;
//called from within a Thread or something alike
private void MessageReceived(string Message){
if (this.doMessage != null)
{
this.doMessage(this, Message);
}
}
}
public class Main{
Connection con;
public Main()
{
this.con = new Connection();
this.con.doMessage += con_doMessage;
}
void con_doMessage(object sender, string message)
{
txtMain.Text = txtMain.Text + Environment.NewLine + message;
}
}
我用谷歌搜索了我的指尖血腥,但我发现只是事件在放电,而不是像我的例子那样的覆盖类。
事实上,我是标准C++的新手,也许有一种简单的方法可以将数据发送到覆盖类,方法是从类内触发它,我只是还没有看到它。
但是,是的,如前所述,我不知道,非常感谢一些建议。
使用 std::function
作为回调:
void printSomething() { std::cout << "event!" << std::endl; }
int main() {
std::function<void()> onEvent;
onEvent = &printSomething;
onEvent(); // prints "event!"
}
<小时 />如果需要 C# 样式的委托,请使用std::vector<std::function<...>>
:
struct Delegate {
std::vector<std::function<void()>> funcs;
template<class T> Delegate& operator+=(T mFunc) { funcs.push_back(mFunc); return *this; }
void operator()() { for(auto& f : funcs) f(); }
};
int main() {
Delegate delegate;
delegate += []{ std::cout << "hello, "; };
delegate += []{ std::cout << "world!" << endl; };
delegate(); // prints "hello, world!"
}
或者只是复制我的ssvu::Delegate
类,可在此处获得。
这与最近的一个问题相关或相同。你可以在那里查看我的答案。简而言之,比构建自己的基础设施更完整/经过测试的解决方案可能是 Boost.Signals2。
使用std::function
可能足以满足几乎所有用例的需求。如果您确实需要多个事件接收器,请查看我编写的multifunction
(多播委托)概念证明。
它允许您编写语法类似于 C# 的代码:
void f(int n) { cout << "f: " << n << "n"; }
util::multifunction<void(int)> event;
event += f;
event += [](int n) { cout << "[]: " << n << "n"; };
event(42);
相关文章:
- 给定顺序中的事件处理
- C++事件系统 - 多态事件和事件处理程序
- wxWidgets 拖放文件事件处理程序初始化问题(无效static_cast)
- 更好的事件处理机制?
- 如何将IEnumerable与Process.Start的输出事件处理程序一起使用?
- "动态创建的事件处理程序"复选框
- Wxwidgets - 如何添加调整大小事件处理程序以使"X"绘图随窗口调整大小?
- Qt 键按事件处理程序仅在按下 ctrl、alt 或 shift 键时做出反应
- 类成员作为 C++ 中 C 样式事件的事件处理程序
- C 设计事件处理程序类
- 将托管事件处理程序传递给 Linux 中的非托管代码
- 如何在 c++ linux 中创建事件处理程序
- 解除 lambda 事件处理程序的绑定
- 这是MFC C 中单个选择的ComboBox的事件处理程序
- 审核的实时事件处理 C/C++
- 指纹读取器 - 从 C# 代码创建事件处理程序到C++的问题
- 为什么我的Windows控制台关闭事件处理程序超时
- 无法让 matplotlib 事件处理程序与 Boost.Python 一起工作
- 事件处理程序是Embarcadero C++Builder中的重入程序吗
- QTSCXML状态机中的事件处理