- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想创建一个具有(浅层)事件层次结构的事件调度系统,可以通过(浅层)EventObservers 层次结构进行观察。我认为双分派(dispatch)将允许各种各样的事件和 EventObservers,而不必为每个组合都有一个函数。
我有这样的代码:
class BaseObserver;
class BaseEvent {
public:
virtual std::string getName() { return "BaseEvent"; }
void beObservedBy( BaseObserver* obv );
};
class BaseObserver {
public:
virtual void observe( BaseEvent* evt ) {
std::cout << "BaseObserver observing: " << evt->getName() << "." << std::endl;
}
};
void BaseEvent::beObservedBy( BaseObserver* obv ) { obv->observe( this ); }
然后定义几个测试类:
class EventA : public BaseEvent {
public:
void beObservedBy( BaseObserver* obv ) { obv->observe( this ); }
virtual std::string getName() { return "I am an EventA"; }
};
class EventB : public BaseEvent {
public:
void beObservedBy( BaseObserver* obv ) { obv->observe( this ); }
virtual std::string getName() { return "I am an EventB"; }
};
class ObserverX : public BaseObserver {
virtual void observe( EventA* evt ) { std::cout << "ObserverX spotted an EventA" << std::endl; }
};
(这一切都是在 Double dispatch/multimethods in C++ 和 Wikipedia article on double dispatch 的引导下进行的)
现在,当我调试双重调度时,派生事件类(EventA
)的 beObservedBy
方法被调用,并使用派生的 EventObserver 类,但是 observe( BaseEvent* )
函数被调用而不是 observe( EventA* )
我做错了吗?我尝试使用引用而不是指针,但没有得到喜欢。
最佳答案
问题是您在 ObserverX 中定义了 observe(EventA *evt)
。这会导致函数过载。但是当你调用 observe
时,参数是 BaseEvent *
而不是 EventA *
。所以调用了基类方法。
派生类中的签名必须与基类中的签名匹配,否则它不会覆盖它,它只是重载它(所以你最终得到两个函数 - 一个接受 EventA *
和一个接受 BaseEvent *
的。
尝试在 ObserverX 中定义 observe(BaseEvent *evt)
。
关于c++ - 在 C++ 中使用两个类层次结构实现双重分派(dispatch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131700/
我正在尝试将多个水平链接的 Button 和 TextView 垂直链接为 View 集,但仍保持平面 View 层次结构。这是我的初始布局和代码:
到目前为止,我已经在Google BigQuery上训练了几种模型,目前我需要查看模型的外观(即架构,损失函数等)。 有没有办法获取这些信息? 最佳答案 仔细阅读文档后,我可以说该功能尚不存在。我什至
本文实例讲述了PHP实现二叉树深度优先遍历(前序、中序、后序)和广度优先遍历(层次)。分享给大家供大家参考,具体如下: 前言: 深度优先遍历:对每一个可能的分支路径深入到不能再深入为止,而且每个
我是一名优秀的程序员,十分优秀!