用原生态c++实现一个信号槽
时间: 2023-08-24 15:53:57 浏览: 63
在原生的 C++ 中,没有内置的信号槽机制,但你可以使用函数指针和回调函数来实现一个简单的信号槽。以下是一个示例代码,展示了如何在原生 C++ 中实现一个简单的信号槽:
```cpp
#include <iostream>
#include <functional>
// 定义一个信号类
class MySignal {
public:
// 定义一个信号类型,使用 function 类模板
typedef std::function<void(const std::string&)> SignalType;
// 连接槽函数
void connectSlot(SignalType slot) {
slots.push_back(slot);
}
// 发出信号
void emitSignal(const std::string& message) {
for (auto slot : slots) {
slot(message);
}
}
private:
std::vector<SignalType> slots;
};
// 定义一个槽函数
void mySlot(const std::string& message) {
std::cout << message << std::endl;
}
int main() {
// 创建信号对象
MySignal signal;
// 连接槽函数
signal.connectSlot(mySlot);
// 发出信号
signal.emitSignal("Hello, world!");
return 0;
}
```
在上面的示例中,我们定义了一个名为 `MySignal` 的信号类,其中包含了一个 `SignalType` 类型的信号。`SignalType` 类型是一个函数对象类型,它接受一个字符串参数并没有返回值。
我们通过 `connectSlot` 成员函数连接槽函数,并通过 `emitSignal` 成员函数发出信号。在 `main` 函数中,我们创建了一个信号对象 `signal`,连接了槽函数 `mySlot`,然后发出了信号,槽函数被调用并打印出 "Hello, world!"。
需要注意的是,这种简单的实现方式没有提供自动断开连接、多个槽函数等高级特性。如果需要更复杂的信号槽功能,建议使用支持信号槽机制的库,如 Qt。