- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试实现一个类,该类允许监听某些事件,并且当这些事件发出时,它们会收到通知。
所以我想到使用仿函数,
class MyFunctor {
public:
virtual void emit() {}
vitual void compare() {}
};
class MyFunctorSpecial : public MyFunctor {
void (*)() ab;
public:
MyFunctorSpecial(void (*a)()) : ab(a) {}
void emit() { ab(); }
};
class EventEmitter {
std::map<std::string, std::vector<MyFunctor> > eventMap;
public:
void On(const std::string &, const MyFunctor &) {
// add to the map
}
void Emit(const std::string & eventName) {
// emit the event
// for all listeners in the vector for this event-name
// call the emit of them.
}
};
EventEmitter emitter;
// some function - abc()
MyFunctorSpecial funct(abc);
emitter.On("hello", funct);
emitter.Emit("hello");
但现在我想将参数传递给听众。喜欢
emitter.Emit("hello", 45, false);
我认为这些关于各种参数的数据类型的信息在编译时可用于Emit()
。我可以使用该信息来实现它吗,使用模板或任何东西。
这个问题是否有另一种模式?我怎样才能做到这一点?
最佳答案
您的问题的常见设计模式称为 Observer Design-Pattern .
你所谓的“仿函数”不是仿函数。如果是这样,它们就会实现一个operator()方法,并且可以像函数一样被调用(因此得名仿函数)。你的不是。
例如,这是一个仿函数:(注意operator())
class MyFunctor
{
public:
void operator()(){};
};
关于c++ - C++ 中的 EventEmitter 类 : Listener and Emitter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20739486/
现在我正在尝试创建一个忽略特定 channel 中特定命令的 Discord 机器人命令。为了取消忽略 channel ,用户必须输入命令,然后他们会收到提示,告诉他们输入“是/否”,然后回答是、否,
我有下一个代码: inline fun completable(crossinline action: () -> Unit) = completable(action, {}) inline fun
浏览http://microjs.com ,我看到许多标有“事件发射器”的库。我喜欢认为我非常了解 Javascript 语言的基础知识,但我真的不知道“事件发射器”是什么或做什么。 有大佬解惑一下吗
方法说明: 注册了指定event的所有监听器将被作为数组返回。 语法: 复制代码 代码如下: emitter.listeners(event)
方法说明: 移除指定事件的某个监听器。 语法: 复制代码 代码如下: emitter.removeListener(event, listener) &nbs
方法说明: 为指定事件注册一个 单次 监听器,所以监听器至多只会触发一次,触发后立即解除该监听器。 语法: 复制代码 代码如下: emitter.once(eve
方法说明: 移除所有监听器,如果指定event,则将移除指定事件的所有监听器。 语法: 复制代码 代码如下: emitter.removeAllListeners
从节点命令行尝试 Facebook 发射器时出现以下错误。我尝试在不使用 Bable 的情况下删除 EventEmitter 周围的 {},然后使用 Bable 和下面的代码。 EventEmitte
所以我动态创建 QPushButton 对象,然后映射它们以发出信号。从与信号关联的插槽中,我想编辑对象的属性(在本例中是文本,即 QPushButton::text())。 在头文件中的类“对话框”
我正在创建一个“跳转到内容”链接。链接位于 app.component 中,内容与目标一起位于 login.component 中。 我试过了 several methods , 没有一个成功。所以现
当 someevent 事件被触发时,我只想等待 promise 得到解决,然后再继续。但是slowFunctionThatReturnsPromise需要很长时间才能解决,并且在解决之前整个流程就关
我有一个粒子系统与其后跟的对象相连。发射器速度在此处设置为刚体。我想要的是像这样使粒子系统跟随对象,但是当检测到触摸输入时,粒子将跟随触摸输入,将“发射器速度”更改为“变换”。在运行我附加的代码时,我
我在这个问题中遇到了类似的问题: node.js - request - How to "emitter.setMaxListeners()"? 用户似乎已经解决了他们的问题,但我不确定他们是如何做到
我正在尝试对公司另一个小组提供给我的 WSDL 文件运行 wsdl2java 命令。我知道 wsdl2java 可以工作,因为我可以运行这些示例,但是当我在给我的 wsdl 上尝试它时,它失败了。一个
我正在 create() 的帮助下手动创建 Observable。现在在里面,我检查了一些条件并基于此,我想通知订户有关错误。以下是我创建可观察对象的方式: public Observable log
当我使用 node.js 'request' 模块对某个 URI 执行 GET 时; var options = {uri:"aURI", headers:headerData}; request.g
我正在尝试实现一个类,该类允许监听某些事件,并且当这些事件发出时,它们会收到通知。 所以我想到使用仿函数, class MyFunctor { public: vir
这个问题已经有答案了: 奥 git _a (17 个回答) 已关闭 5 年前。 由于某种原因,每当我赢得游戏,即玩家击中目标时,应用程序就会在线崩溃 playerPhysicsBody.node?.a
我一直在尝试使用 YAML::Emitter 输出一个 yaml 文件。例如,我需要这样的东西作为我的 yaml 文件。 annotations: - run: type: range
我已经从我们的暂存环境中拉下了一个应用程序,该应用程序在暂存计算机上完美运行,但在本地它卡在 sequelize.sync 函数上。 应用程序甚至没有到达“监听端口...” 我已经通过 Sequeli
我是一名优秀的程序员,十分优秀!