C++类外部注册一个事件,将内部数据传出的例子
时间: 2024-05-08 09:21:41 浏览: 12
好的,下面是一个简单的例子:
```
#include <iostream>
#include <string>
#include <functional>
class Event
{
public:
using Callback = std::function<void(const std::string&)>;
void registerCallback(const Callback& cb)
{
m_callback = cb;
}
void triggerEvent(const std::string& data)
{
if (m_callback)
{
m_callback(data);
}
}
private:
Callback m_callback;
};
class MyClass
{
public:
void setData(const std::string& data)
{
m_data = data;
}
void registerEvent(Event& event)
{
event.registerCallback(std::bind(&MyClass::onEvent, this, std::placeholders::_1));
}
void onEvent(const std::string& data)
{
std::cout << "Received event with data: " << data << std::endl;
}
private:
std::string m_data;
};
int main()
{
Event event;
MyClass myClass;
myClass.setData("Hello, world!");
myClass.registerEvent(event);
event.triggerEvent(myClass.getData());
return 0;
}
```
在这个例子中,我们定义了一个 `Event` 类,它可以注册一个回调函数,并在事件触发时调用该回调函数。我们还定义了一个 `MyClass` 类,它有一个 `setData` 函数来设置内部的数据,以及一个 `registerEvent` 函数来注册事件。在 `registerEvent` 函数中,我们将一个回调函数绑定到 `MyClass` 中的 `onEvent` 函数上,并将该回调函数注册到 `Event` 对象中。当 `Event` 对象触发事件时,它将调用该回调函数,并将事件数据作为参数传递给它。在 `onEvent` 函数中,我们简单地将事件数据打印到控制台上。
在 `main` 函数中,我们创建了一个 `Event` 对象和一个 `MyClass` 对象,并将 `MyClass` 对象的数据设置为 "Hello, world!"。然后,我们将 `MyClass` 对象注册到 `Event` 对象中,并手动触发事件。当事件被触发时,它将调用 `MyClass` 中的 `onEvent` 函数,并将 "Hello, world!" 作为参数传递给它。最后,我们打印出收到的事件数据。
这个例子可能有点简单,但它演示了如何在类外部注册一个事件,并将内部数据传递给回调函数。