Files
2026-07-29 18:08:57 +08:00

31 lines
946 B
C++

#pragma once
#include <QMouseEvent>
#include <vector>
namespace Psc {
template <typename Handler_Type>
class Delegate {
public:
std::vector<Handler_Type> handlers;
Delegate& operator+=(const Handler_Type& handler) {
if (std::find(handlers.begin(), handlers.end(), handler) == handlers.end()) {
handlers.push_back(handler);
}
return *this;
}
Delegate& operator-=(const Handler_Type& handler) {
auto it = std::find(handlers.begin(), handlers.end(), handler);
if (it != handlers.end()) {
handlers.erase(it); // 移除对应的处理程序
}
return *this;
}
template <typename... Args>
void invoke(Args&&... args) const {
for (auto& handler : handlers) {
handler(std::forward<Args>(args)...); // 完美转发参数
}
}
};
using Mouse_Press_Event_Handler = std::function<void(QMouseEvent*)>;
} // namespace Psc