Files
Renderive/YSGraphic_Core/component/Base/Delegate.h
T
2026-06-16 13:33:27 +08:00

34 lines
1.0 KiB
C++

#pragma once
#include <QVector>
#include <QMouseEvent>
namespace Psc {
template <typename Handler_Type>
class Delegate {
public:
QVector<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 MousePressEvent_Handler = std::function<void(QMouseEvent*)>;
}