Kyl*_*yle 1 c++ callback this event-handling
我有一个GUI架构,其中元素像这样触发事件:
guiManager->fireEvent(BUTTON_CLICKED, this);
Run Code Online (Sandbox Code Playgroud)
每个被触发的事件都将'this'传递给事件的调用者.从未有一个时间,我不希望通过"这个",而且,没有指针,除了为"本"应该永远传递.
这给我带来了一个问题:我如何断言fireEvent永远不会被赋予除'this'以外的指针,我如何简化(和均质化)对fireEvent的调用:
guiManager->fireEvent(BUTTON_CLICKED);
Run Code Online (Sandbox Code Playgroud)
在这一点上,当你写这样的东西时,我想起了一个相当常见的编译器错误:
class A {
public:
void foo() {}
};
class B {
void oops() { const A* a = new A; a->foo(); }
};
int main() {
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译这将给你
在成员函数'void B :: oops()'中:错误:将'const A'作为'void A :: foo()'的'this'参数传递,丢弃限定符
因为成员函数将'this'作为隐藏参数传递.
"啊哈!" 我说.这(没有双关语)正是我想要的.如果我能以某种方式访问隐藏的'this'指针,它将解决我之前提到的两个问题.问题是,据我所知你不能(可以吗?),如果可以的话,会有一些"但它会破坏封装!" 除了我每次都已经传递'这个',所以它还能破坏它.
那么,有没有办法访问隐藏的'this',如果没有,是否有任何习惯用法或替代方法比每次传递'this'更优雅?
你可以定义
void Element::fireEvent(EVENT e) {
guiManager->fireEvent(e, this);
}
Run Code Online (Sandbox Code Playgroud)
每次都要节省一些自己的写作.你将不得不this在某个时候调用它,因为guiManager需要知道哪个Element叫fireEvent.