更改一下不用std::function
时间: 2023-07-21 22:11:38 浏览: 41
好的,我可以为您提供一个不使用 std::function 的信号与槽框架的示例代码。以下是使用 C++ 的示例:
```cpp
#include <iostream>
#include <map>
#include <vector>
// 信号类
class Signal {
public:
// 定义槽函数类型
using Slot = void(*)();
// 连接槽函数
void connect(Slot slot) {
slots.push_back(slot);
}
// 发送信号
void emit() {
for (const auto& slot : slots) {
slot();
}
}
private:
std::vector<Slot> slots;
};
// 槽类
class SlotClass {
public:
void memberFunction() {
std::cout << "This is a member function." << std::endl;
}
};
// 普通函数作为槽函数
void normalFunction() {
std::cout << "This is a normal function." << std::endl;
}
int main() {
Signal signal;
// 创建槽对象
SlotClass slotObject;
// 使用槽对象的成员函数作为槽函数
signal.connect([](){ slotObject.memberFunction(); });
// 使用普通函数作为槽函数
signal.connect(normalFunction);
// 发送信号,执行槽函数
signal.emit();
return 0;
}
```
在这个示例中,我们定义了一个 Slot 类型,它是一个指向无返回值、无参数的函数指针。Signal 类中的 slots 容器存储了这些槽函数。
在连接槽函数时,我们使用了一个 lambda 表达式来捕捉 slotObject,并调用其成员函数。对于普通函数,我们直接传递函数名即可。
通过调用 emit() 函数,我们发送信号并执行所有连接的槽函数。
希望这个示例满足了您的需求!如果有任何疑问,请随时提问。