是否可以将函数指针用于函数和成员函数?
我想创建一种事件句柄,该事件句柄可以容纳类的成员函数,同时应具有“正常”函数指针。
编辑:我找到了一个解决方案。也许不是最好的,而是最好的一个。
事件.h
#include <map>
class BasicEvent {
public:
BasicEvent(int id) : eventId(id)
{}
int GetId() const
{
return eventId;
}
virtual void ObjectMethode() {}
protected:
const int eventId;
};
class BasicEventHandler {
public:
void Trigger(BasicEvent* event)
{
if (this->eventMap.find(event->GetId()) != this->eventMap.end()) {
eventMap[event->GetId()](event);
}
}
void AddEvent(int id, std::function<int(BasicEvent*)> eventFunction)
{
eventMap[id] = eventFunction;
}
void RemoveEvent(int id)
{
this->eventMap.erase(id);
}
private:
std::map<int, std::function<int(BasicEvent*)>> eventMap;
};
main.cpp
class CustomEvent : public BasicEvent {
public:
CustomEvent(int id) : tq::BasicEvent(id)
{
x = 9;
y = 8;
}
struct {
int x;
int y;
};
void ObjectMethode()
{
std::cout << this->eventId << " Custom Event: X: " << x << " Y: " << y << '\n';
}
};
int main() {
BasicEventHandler myHandler;
myHandler.AddEvent(0, [&](BasicEvent* event) {
std::cout << " EVENT <" << event->GetId() << "> Triggered!\n";
return 0;
});
myHandler.AddEvent(1, [&](tq::BasicEvent* event) {
event->ObjectMethode();
return 0;
});
myHandler.Trigger(&BasicEvent(0));
myHandler.Trigger(&CustomEvent(1));
return 0;
}
成员函数将在何处获得其“ this”指针?这两个函数不能具有相同的签名。最好的选择是创建一个lambda,它将捕获“ this”,并将其发送给事件处理程序。
std::function
将能够为您保留它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句